![]() |
Spaltenbreite von ListView stimmt nicht
Hallo,
nachdem ich nun mein ![]() 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 |
Re: Spaltenbreite von ListView stimmt nicht
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 |
Re: Spaltenbreite von ListView stimmt nicht
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 |
Re: Spaltenbreite von ListView stimmt nicht
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.
|
Re: Spaltenbreite von ListView stimmt nicht
Hast du irgendwo deinen Code deponiert, den man anschauen könnte? :?:
|
Re: Spaltenbreite von ListView stimmt nicht
Liste der Anhänge anzeigen (Anzahl: 1)
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
|
Re: Spaltenbreite von ListView stimmt nicht
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
bei mir funktioniert dein Code. Wenn ich Spalte3 nach vorne ziehe, wird Caption und die Breite der Spalte richtig angezeigt. |
Re: Spaltenbreite von ListView stimmt nicht
Na doll.... deine exe geht bei mir auch...dann liegts wohl an Delphi, mit welcher Version hast du kompiliert?
|
Re: Spaltenbreite von ListView stimmt nicht
Getestet mit Delphi6 und 2005 PE.
|
Re: Spaltenbreite von ListView stimmt nicht
Delphi 2007, wollte grad was in QualityCentral schreiben, aber anscheind ist das bekannt..seit Delphi 2006:
![]() Edit: Falls jemand dort registriert ist, kann er ja mal für den Bug voten, danke :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz