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