Zitat von
Pseudemys Nelsoni:
siehe threadname, ich verstehe die zuweisung irgendwie nicht.
hat das den gleichen effekt wie:
ListView.Items.Add(ListItem);
Hi,
ListView1.Items.Add(ListItem) würde gar nicht compilieren, da Add() keine Parameter erwartet.
Add() erstellt von sich aus ein neues ListItem und liefert den Zeiger darauf. Man könnte also z.B. schreiben:
Delphi-Quellcode:
var NewItem: TListItem;
begin
NewItem := ListView1.Items.Add;
NewItem.Caption := 'Neues Item';
end;
Der alternative Weg, ein ListItem einzufügen, ist anscheinend ein wenig verbuggt.
Delphi-Quellcode:
type
TMySpecialListItem = class(TListItem)
public
TimeStamp: TDateTime;
LinkedObj: TObject;
end;
Falsch:
Delphi-Quellcode:
procedure Foo;
var NewItem: TMySpecialListItem;
begin
NewItem := TMySpecialListItem.Create(ListView1.Items); {Item wird noch nicht angezeigt}
NewItem.Caption := 'Neues Item';
NewItem.TimeStamp := now;
LinkedObj := SomeThreadOrSomeImageOrWhatever;
ListView1.Items.AddItem(NewItem); {Eigenschaft Caption geht verloren => leerer Eintrag}
end;
"Richtig":
Delphi-Quellcode:
procedure Foo;
var NewItem: TMySpecialListItem;
begin
NewItem := TMySpecialListItem.Create(ListView1.Items); {Item wird noch nicht angezeigt}
ListView1.Items.AddItem(NewItem);
NewItem.Caption := 'Neues Item';
end;
[size=2]Alternative method may or may not cause memory leaks
[/size]
Dani H.
At Least I Can Say I Tried