Forum: Programmieren allgemein
Delphi
by peterbelow,
31. Mai 2019
Wenn Du in einer Schleife etwas aus einer Liste löscht sollte die Schleife immer vom Ende der Liste rückwärts laufen. Schließlich ändert der Löschvorgang nicht nur die Zahl der Einträge in der Liste sondern auch die Indices aller Einträge nach dem gelöschten.
Ersetze die While-Schleife einfach durch
for i := FPdfList.Count-1 downto 0
begin
if FPdfList.Items.Active then
begin...
Forum: Programmieren allgemein
Delphi
by peterbelow,
30. Mai 2019
Und genau das passiert auch, sowohl in TObjectlist als auch bei TObjectlist<T>. Dieser Notification-Mechanismus wird von TObjectlist vom Elter TList geerbt und überschrieben, um das Verhalten bei OwnsObjects = true zu implementieren. Da muss der Programmierer nichts mehr nachflicken, das ist alles schon geregelt.
OnNotify muss man sich nur antun, wenn man TList oder TList<T> verwendet und die...
Forum: Programmieren allgemein
Delphi
by peterbelow,
29. Mai 2019
Wie kommst Du denn da drauf? Wenn man eine TObjectlist mit OwnsObject = true erzeugt will man damit erreichen, dass die Liste die Lebensdauer der hinzugefügten Objekte verwaltet und man sich nicht mehr selbst darum kümmern muss. Das ist wie das Owner-Konzept bei TComponent & Cie.
Wenn man die Liste leert, zerstört oder einen einzelnen Eintrag mit Delete entfernt ruft die Liste für die...
Forum: Programmieren allgemein
Delphi
by peterbelow,
28. Mai 2019
Das hast Du nicht ganz richtig verstanden. Das Verhalten der Liste wird von der OwnsObjects-Eigenschaft gesteuert. Wenn die True ist zerstört die Liste die enthaltenen Objekte, wenn sie aus der Liste entfernt werden, also genau das, was Du haben willst. Was Du im Zitat oben geschrieben hast gilt, wenn OwnsObjects False ist.