Wenn ich hingegen irgendeine Zeile von AddButton entferne dann kracht es wieder.
Delphi-Quellcode:
function TClsProgBar.AddButton(var oButton: TClsButtonInfo): Bool;
begin
if ButtonExists(oButton.Num) then
RemoveButton(oButton.Num);
FColButtons.Add(oButton); // kann nicht entfernt werden
FColButtons.Insert(oButton.Num, oButton); // Das auch nicht
Result := True;
end;
Dann solltest du herausfinden, warum es dann kracht, denn die beiden Zeilen machen zweimal das fast gleiche. Beim Add wird der Button an die TObjectList angehängt und beim Insert nochmal an der übergebenen Stelle eingefügt. Nach dem ersten Aufruf von AddButton enthält die TObjectList somit zwei Elemente (Buttons), wobei es sich aber um dieselbe Instanz eines Buttons handelt. Leider konnte ich nocht nicht erkennen, ob die TObjectList mit OwnsValues kreiert wurde. Dann gibt es nämlich spätestens beim Entfernen der Buttons ganz massive Probleme. Außerdem gibt TObjectList.Count die Anzahl der Elemente zurück, die immer das doppelte der Anzahl der Buttons entspricht.
Der Code mit Add
und Insert ist in jedem Fall falsch.
Gib doch bitte mal den kompletten Code mitsamt ButtonExists uhnd RemoveButton, damit man mal den Überblick bekommt.