![]() |
Speicher richtig freigeben
Hi, hab mal ne Frage zum Freigeben des Speichers:
Ich füge zur Laufzeit in FormCreate Bitmaps einer ToolBar hinzu. Dabei erhalte ich das Bitmap aus einer Funktion, in der das Bitmap erzeugt wird. Hier mal ein vereinfachtes Beispiel:
Delphi-Quellcode:
Erhalte ich so ein Speicherleck, weil das Bitmap nicht wieder freigegeben wird?
function MyBitmap: TBitmap;
begin Result := TBitmap.Create; Result.LoadFromFile... end; procedure TForm1.FormCreate(Sender: TObject); begin ToolBar1.Images := TImageList.Create(ToolBar1); ToolBar1.Images.AddMasked(MyBitmap, clBlack); end; Oder wird es automatisch freigegeben, da es zur ToolBar gehört und die ToolBar zu Form1 ? |
Re: Speicher richtig freigeben
du musst die Imagelist und das Bitmap selbst wieder frei geben.
Das Bitmap kannst du jedoch direct nach AddMasked freigeben das mit AddMasked das Bitmap kopiert wird. |
Re: Speicher richtig freigeben
Danke für die schnelle Antwort :thumb:
Zitat:
Die ImageList wird doch zur ToolBar1 erzeugt. Aber das ist ja nicht das eigentliche Problem. Zitat:
Das Bitmap erhalte ich ja durch eine Funktion, wie kann ich es denn dann wieder freigeben? Geht das etwa so?
Delphi-Quellcode:
Aber ich rufe doch beim zweiten Mal die Funktion erneut auf und erhalte so auch ein neues Bitmap (das ich freigebe).
ToolBar1.Images.AddMasked(MyBitmap, clBlack);
MyBitmap.Free; Oder liege ich da falsch? :gruebel: |
Re: Speicher richtig freigeben
So:
Delphi-Quellcode:
var
bmp: TBitmap; begin ... bmp := MyBitmap; ToolBar1.Images.AddMasked(bmp, clBlack); Bmp.Free; |
Re: Speicher richtig freigeben
Zitat:
Aber dann ist es glaub ich eher üblich, das ganze so zu schreiben:
Delphi-Quellcode:
Oder???
procedure MyBitmap(var Bitmap: TBitmap);
begin Bitmap.LoadFromFile... end; |
Re: Speicher richtig freigeben
Nochmal zur ImageList der ToolBar:
Wenn ich die ImageList einer ToolBar so erzeuge:
Delphi-Quellcode:
oder so:
ToolBar1.Images := TImageList.Create(ToolBar1);
Delphi-Quellcode:
dann muss ich sie doch nicht wieder extra freigeben, oder?
ToolBar1.Images := TImageList.Create(Self); // Self = Form1
Die ImageList gehört doch dann zur Form1 (bzw. zu ToolBar1 und diese gehört zu Form1) und beim Schließen von Form1 wird die ImageList (ToolBar1.Images) auch wieder ordnungegemäß freigegeben... :gruebel: Oder dachte ich da bisher falsch??? |
Re: Speicher richtig freigeben
Hmm...
Muss leider mal pushen^^ :oops: Hat keiner eine Antwort auf meinen obigen Beitrag #6 ? |
Re: Speicher richtig freigeben
Du hast recht. Du musst sie wohl nicht selbst freigeben.
|
Re: Speicher richtig freigeben
...gut, Danke!
Das wars auch schon :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz