AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Spaltenbreite von ListView stimmt nicht

Ein Thema von neothemachine · begonnen am 4. Jun 2007 · letzter Beitrag vom 5. Jun 2007
Antwort Antwort
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#1

Spaltenbreite von ListView stimmt nicht

  Alt 4. Jun 2007, 15:23
Hallo,

nachdem ich nun mein Spaltenausblendungs-Problem gelöst hab, bin ich auf etwas anderes kurioses gestoßen. Hier mal an einem Beispiel:

Ich habe eine ListView mit 3 Spalten: "Spalte 1", "Spalte 2", "Spalte 3"
FullDrag ist auf true, sodass man die Spalten verschieben kann.

Ich lege dann die folgenden Breiten (ListView.Column[..].Width) für Spalte 1, 2 und 3 fest: 80, 50, 10

Wenn ich dann mit ListView.Column[0].Width die Breite von Spalte 1 auslese, kommt 80 raus, bei ListView.Column[0].Caption ist es "Spalte 1", soweit ok. Dann verschiebe ich Spalte 1 und 2, also vertausche sie. Nun wieder ListView.Column[0].Width auslesen und es ist komischerweise immer noch 80, müsste 50 sein, aber ListView.Column[0].Caption ist "Spalte 2", es ist also die richtige Column=0 ausgewählt.

Wie kann denn sowas sein? Hab auch nichts passendes im Forum gefunden, aber ich bräuchte es, um die Spaltenbreiten zu speichern.

Danke,
Maik
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#2

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 15:19
Hab das Problem mittlerweile selber gelöst..

Ich hab immernoch keine Ahnung warum beim Abrufen der Spaltenbreite anscheinend die falsche ID benutzt wird, aber habs mit einem Workaround hinbekommen. Die ID, die benutzt wird ist nämlich nicht der Index, sondern die ID, in der die Spalten erzeugt wurden, also eine Art logische ID, die sich auch nicht ändert.

Beim Erzeugen der Spalten weise ich jeder Spalte mit .Tag eine eindeutige ID zu (in der Funktion unten: id). Dann speichere ich die Reihenfolge der Erzeugung der Spalten in einem Array (ListViewVisibleColumns), wo der Wert von .Tag gespeichert wird (also z.b. [0]:= 2; [1]:= 5).

Wenn ich nun die Breite von der Spalte mit Index 0 herausfinden will mache ich das mit dem Aufruf:


Delphi-Quellcode:
width:= ListViewFindColumnWidth(ListView.Column[0].Tag);

function TForm1.ListViewFindColumnWidth(id: integer):integer;
var x: integer;
begin
    result:= -1;

    for x:=0 to Length(ListViewVisibleColumns) - 1 do begin
        if ListViewVisibleColumns[x]=id then begin
            result:= ListView.Column[x].Width;
            break;
        end;
    end;
end;

Ich glaube zwar nicht, dass das im Sinne des Erfinders war, aber naja...zumindest gehts
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 15:23
Hallo,

ich hab die Vermutung, dass die Spalte 1 immer die Spalte 1 bleibt, auch wenn sie sich an einer anderen Position befindet.
Und da die Spalte 1 = ListView.Column[0].Width wird dadurch immer die Breite der Spalte 1 angezeigt, auch wenn optisch eine andere spalte an der Stelle der Spalte 1 steht

[Edit]

ich hab das grad mal in einem Projekt getestet, es ist so wie ich es oben beschrieben hab
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#4

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 15:29
Das mag ja sein, aber es macht einfach für mich keinen Sinn wenn ListView.Column[0].Width so bleibt, aber ListView.Column[0].Caption sich ändert und auch sonst alles zur korrekten Spalte gehört, bis auf die Breite eben.
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
177 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 18:00
Hast du irgendwo deinen Code deponiert, den man anschauen könnte?
Gruss Gremlin
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#6

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 18:27
Hier, das hab ich erstellt ums mal zu testen. Damit ich sicher gehen kann, dass es nicht an irgendwas anderem Komplexen an meinem Programm liegt
Angehängte Dateien
Dateityp: zip listview_test_176.zip (6,7 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 21:42
Hallo,

bei mir funktioniert dein Code. Wenn ich Spalte3 nach vorne ziehe, wird Caption und die Breite der Spalte richtig angezeigt.
Miniaturansicht angehängter Grafiken
spalte3_180.jpg  
Angehängte Dateien
Dateityp: zip project1_515.zip (220,6 KB, 8x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#8

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 21:55
Na doll.... deine exe geht bei mir auch...dann liegts wohl an Delphi, mit welcher Version hast du kompiliert?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 21:58
Getestet mit Delphi6 und 2005 PE.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
neothemachine

Registriert seit: 23. Dez 2004
18 Beiträge
 
#10

Re: Spaltenbreite von ListView stimmt nicht

  Alt 5. Jun 2007, 22:11
Delphi 2007, wollte grad was in QualityCentral schreiben, aber anscheind ist das bekannt..seit Delphi 2006:
http://qc.codegear.com/wc/qcmain.aspx?d=30134

Edit: Falls jemand dort registriert ist, kann er ja mal für den Bug voten, danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz