Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Spaltenbreite von ListView stimmt nicht (https://www.delphipraxis.net/93334-spaltenbreite-von-listview-stimmt-nicht.html)

neothemachine 4. Jun 2007 14:23


Spaltenbreite von ListView stimmt nicht
 
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

neothemachine 5. Jun 2007 14:19

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

Helmi 5. Jun 2007 14:23

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

neothemachine 5. Jun 2007 14:29

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.

Gremlin 5. Jun 2007 17:00

Re: Spaltenbreite von ListView stimmt nicht
 
Hast du irgendwo deinen Code deponiert, den man anschauen könnte? :?:

neothemachine 5. Jun 2007 17:27

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

bitsetter 5. Jun 2007 20:42

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.

neothemachine 5. Jun 2007 20:55

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?

bitsetter 5. Jun 2007 20:58

Re: Spaltenbreite von ListView stimmt nicht
 
Getestet mit Delphi6 und 2005 PE.

neothemachine 5. Jun 2007 21:11

Re: Spaltenbreite von ListView stimmt nicht
 
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 :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:13 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