![]() |
AW: Record zu TStringlist hinzufügen
Soweit ich weiß muss man jedes Objekt selber freigeben und dann die Liste.
|
AW: Record zu TStringlist hinzufügen
Moin...:P
Mit TList<> mußt du dich selbst um die Freigabe kümmern. Die TObjectList<> kümmert sich selbst um die Freigabe. 8-) |
AW: Record zu TStringlist hinzufügen
Zitat:
Da ich TObjectList verwende sollte das dann reichen. OK bevor ich diese Freigebe lösche ich natürlich noch die Bitmap Ressourcen. Mehr ist das ja nicht. Danke. gruss |
AW: Record zu TStringlist hinzufügen
Bei TList mit Pointern ja,
in TList<IrgendeinPointer> auch, aber die TList<EinRecordOderEinAndererEinfacherTypSowieDynA rraysUndInterfaces> kümmert sich um alles. Unter ARC werden auch Objekte gut verwaltet ... da ist dann eine TList<> und TObjektList<> praktisch das Selbe. Bei TObjectList und Anderen kann man im Constructor angeben, ob sich die Liste um das Free kümmert. |
AW: Record zu TStringlist hinzufügen
Zitat:
Habe es jetzt fertig hoffe das mein Teil noch läuft.. Bei mir geht's (Aber das ist ja immer so). gruss |
AW: Record zu TStringlist hinzufügen
Zitat:
|
AW: Record zu TStringlist hinzufügen
Zitat:
|
AW: Record zu TStringlist hinzufügen
Das mache ich alles nach PostQuitMessage.
Danke.
Delphi-Quellcode:
gruss
// Windows Messagen verarbeiten
while GetMessage(Msg, 0, 0, 0) do begin if IsDialogMessage(MainHandle, Msg) = false then begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; KillTimer(MainHandle, 1); // Menu Resource freigeben GDIP_DisposeImage(ImgBack); GDIP_DisposeImage(ImgHover); GDIP_DisposeImage(SideBarImg); if hNotifyRBin > 0 then SHChangeNotifyDeregister(MainHandle); CreateIcon.ShowDesktopIcons(True); for X := 0 to Sprites.Count - 1 do begin if Sprites[X].h_Bitmap <> 0 then begin DeleteObject(Sprites[X].h_Bitmap); Sprites[X].h_Bitmap := 0; end; end; Sprites.Free; FreeAndNil(CreateIcon); FreeAndNil(DockBar); FreeAndNil(ShortCut); SKAERO_Free; |
AW: Record zu TStringlist hinzufügen
Genau, sauberer wäre aber, wenn sich ein TSprite selbst darum kümmern würde. Sprich statt:
Delphi-Quellcode:
So:
for X := 0 to Sprites.Count - 1 do
begin if Sprites[X].h_Bitmap <> 0 then begin DeleteObject(Sprites[X].h_Bitmap); Sprites[X].h_Bitmap := 0; end; end; Sprites.Free;
Delphi-Quellcode:
type
TSprite = class ... public destructor Destroy; override; end; destructor TSprite.Destroy; begin inherited; if h_Bitmap <> 0 then begin DeleteObject(h_Bitmap); h_Bitmap := 0; end; end; // und dann an deiner Stelle nur noch: Sprites.Free; |
AW: Record zu TStringlist hinzufügen
Du hast recht ;)
Habe zwar den Quelltext schon hochgeladen werde es aber trotzdem deinem Beispiel zu folgen noch ändern. Danke schön. Ist dann im nächsten Update enthalten. (Wenn noch eins kommt) Moment ;) Nein geht nicht! (Bei normalen Classen schon) Ich habe ja keine Class in herkömmlichen sinne. Sondern nur meinen Record umbenannt.
Delphi-Quellcode:
gruss
TSprite = class
CtrlName: WideString; CtrlIndex: Integer; Left: Single; Top: Single; Width: Integer; Height: Integer; Scale: Single; Opacity: Byte; ShellTo: string; IconPath: WideString; WorkDir: WideString; UseLabel: string; CmdLine: WideString; ShowCmd: longint; h_Bitmap: HBitmap; Visible: Bool; end; PSprite = ^TSprite; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:32 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-2025 by Thomas Breitkreuz