Einzelnen Beitrag anzeigen

Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#7

AW: ListView - AutoSize der Spalten

  Alt 9. Mai 2014, 15:04
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.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo

Geändert von Captnemo ( 9. Mai 2014 um 15:19 Uhr)
  Mit Zitat antworten Zitat