Ja, aber ich will ja nicht jedes mal alle Columns löschen und wieder einreichten.
In meinem Fall habe ich (nur) 4 Columns, die zur Designtime feststehen und bei Bedarf mit unterschiedlichen Informationen gefüllt werden. Die 2. Spalte ist auf autosize, und soll sich mit der Form anpassen. Ist ja auch kein Problem, die wird ja auch größer.
mit lv1.Column[3].Width:=ColumnHeaderWidth; setze ich dann nach dem Füllen alle anderen auf die max. Breite, so dass es eigentlich passen sollte. Leider tut es das ja bekanntermaßen nicht, und die letzte Spalte verschwindet hinter dem Scrollbar, bis ich dann ein manuelles Resize der Form durchführe. Ein Resize innerhalb der Procedure bringt nix.
Hier mal ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Datenladen;
var
li: TListItem;
i: integer;
begin
lv1.Items.BeginUpdate;
lv1.items.clear;
for i:=0 to Data.Count-1 do
begin
li:=lv1.items.add;
li.caption:=Data[i].Name;
li.subitems.add(Data[i].Vorname);
li.subitems.add(Data[i].Login);
if chk1.checked then
li.subitems.add(Data[i].Password) else
li.subitems.add('***');
end;
lv1.Items.EndUpdate;
lv1.columns[1].Autosize:=True;
lv1.Column[3].Width:=ColumnHeaderWidth;
lv1.Column[2].Width:=ColumnHeaderWidth;
lv1.Column[0].Width:=ColumnHeaderWidth;
end;
procedure TForm1.chk1Click(Sender: TObject);
begin
Datenladen;
end;
So in etwa. Müßte eigentlich auch so Funktionieren, aber geht tatsächlich nur wenn ich zur Laufzeit mit der Maus die Form resize.