Hallo liebe Delphianer,
ich bräuchte einmal eine verständliche, theoretische Erklärung für mein Problem.
und zwar wirkt sich bei mir ein Bitmap.Free auf den Inhalt meiner TObjectList aus...
Delphi-Quellcode:
TMyEntry = class(TObject)
// ...
Icon : TBitmap;
// ...
end;
TMyEntryList = TObjectList<TMyEntry>;
MyList := TObjectList<TMyEntry>;
Und hier der Quellcode zu meinem Problem.
Delphi-Quellcode:
var
i : integer;
MyEntry : TMyEntry;
AIcon : TBitmap;
begin
AIcon := TBitmap.Create;
AIcon.PixelFormat := pf32Bit;
for i := 0 to MyList.Count - 1 do
begin
MyEntry := TMyEntry(MyList[I]);
If MyEntry.Icon = NIL then
begin
try
ImageList.GetBitmap(1, AIcon);
except
end;
end
else
begin
AIcon := MyEntry.Icon;
end;
// weitere Verwendung von AIcon
end;
Folgender Durchlauf:
1) MyEntry.Icon <> NIL, also AIcon = MyEntry.Icon
2) MyEntry.Icon = NIL, also AIcon aus einer ImageList holen
Problem: bei Durchlauf 2 wird das AIcon und damit mein MyEntry.Icon überschrieben
Also ein anderer Versuch, das AIcon immer neu zu erstellen.
Delphi-Quellcode:
var
i : integer;
MyEntry : TMyEntry;
AIcon : TBitmap;
begin
for i := 0 to MyList.Count - 1 do
begin
AIcon := TBitmap.Create;
AIcon.PixelFormat := pf32Bit;
try
MyEntry := TMyEntry(MyList[I]);
If MyEntry.Icon = NIL then
begin
try
ImageList.GetBitmap(1, AIcon);
except
end;
end
else
begin
AIcon := MyEntry.Icon;
end;
// weitere Verwendung von AIcon
finally
AIcon.Free;
end;
end;
Gleicher Durchlauf:
Problem: durch AIcon.Free wird ebenfalls MyEntry.Icon gelöscht -> Zugriffsverletzung beim Aufruf
Kann mir bitte jemand erklären, warum AIcon noch eine Beziehung zu MyEntry.Icon hat?
Wie muss ich MyEntry.Icon an AIcon übergeben, damit ich AIcon ordnungsgemäß löschen kann, ohne MyEntry.Icon zu löschen?
Aktuell muss ich AIcon.Free auskommentiert lassen....
Vielen Dank schon einmal, an diejenigen, die mir dies erklären können.
_