Ich würde zunächst einmal die Methode aufteilen
- ListView Columns definieren
Delphi-Quellcode:
procedure TPostHauptformular.ListViewColumnsPrepare( ALV : TListView; AColumnTextWidth : Integer );
var
LColumn : TListColumn;
begin
ALV.Columns.BeginUpdate;
try
{Alle (alten) Spalten und ListenItems bereinigen.}
ALV.Columns.clear;
{Memo vorhanden?}
LColumn := ALV.Columns.add;
LColumn.Caption := ' ';
LColumn.Width := AColumnTextWidth; // wo kommt die denn her? Mal als Parameter festgelegt s.o.
{Versanddatum}
LColumn := ALV.Columns.add;
LColumn.Caption := 'Datum';
LColumn.Width := AColumnTextWidth; // wo kommt die denn her? Mal als Parameter festgelegt s.o.
// und noch 4 stück...
finally
ALV.Columns.EndUpdate;
end;
end; {FuelleEintragsliste}
- ListView Einträge füllen
Delphi-Quellcode:
procedure TPostHauptformular.FuelleEintragsliste( ALV : TListView; ADataList : TDataList { <- anpassen } );
var
NeuerEintrag: TListItem;
LDataItem : TDataItem; { <- anpassen }
i : integer;
s : string;
begin
ALV.Items.BeginUpdate;
try
ALV.Items.clear;
for i := 0 to AList.letzter do
begin
LDataItem := ADataList[i];
NeuerEintrag := ALV.Items.Add;
NeuerEintrag.Caption := s; // <- den hast du hoffentlich auch gesetzt
NeuerEintrag.SubItems.Add( LDataItem.empfaenger );
NeuerEintrag.SubItems.Add( LDataItem.inhalt );
// und noch'n paar...
end;
finally
Items.EndUpdate;
end;
end; {FuelleEintragsliste}
Und diese würde ich auch nicht beide immer ständig aufrufen, sondern nur dann, wenn die benötigt werden. Ist die ListView schon vorbereitet, dann brauche ich die ja nicht noch schon wieder vorbereiten (es ist ja alles da). Und auch wenn man an die Columns geht, dann eben auch dort ein
BeginUpdate ... EndUpdate
und das auch mit einem
try ... finally
absichern.
Wenn du eine generellere Methode zum Vorbereiten einer ListView haben möchtest, dann definierst du dir eben:
Delphi-Quellcode:
TColumnDef = record
Caption : string;
Width : Integer;
end;
procedure ListViewPrepare( ALV : TListView; AColumnDefs : array of TColumnDef );
var
LIdx : Integer;
begin
ALV.Columns.BeginUpdate;
try
ALV.Columns.Clear;
for LIdx := Low(AColumnDefs) to High(AColumnDefs) do
begin
LColumn := ALV.Columns.Add;
LColumn.Caption := AColumnDefs[LIdx].Caption;
LColumn.Width := AColumnDefs[LIdx].Width;
end;
finally
ALV.Columns.EndUpdate;
end;
end;
Wie man sieht werden die Methoden wesentlich kürzer aber dafür flexibler
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)