Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#20

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 1. Dez 2020, 13:06
Wenn sich der Parent ändert (z.B. kurz nil ist), dann kann das Handle eventuell freigegeben werden,
und auch beim Hide (Visible=False) oder Application.Minimize geben einige Komponenten ihre Handle frei (inkl. der Handle aller Unterkomponenten, weil Windows diese gleich mit löscht).
-> Sparmaßnahmen, weil die Komponente eh nicht sichtbar ist ... oder wenn eine Komponente ohne Parent nicht existieren kann

Hier ein paar Methoden/Ereignisse/Eigenschaften, die dein Problem betreffen. (TWinControl: alle Forms und sichtbaren Komponenten mit einem HWND)
Delphi-Quellcode:
procedure CreateHandle; virtual;
procedure CreateParams(var Params: TCreateParams); virtual;
procedure CreateWindowHandle(const Params: TCreateParams); virtual;
procedure CreateWnd; virtual;
procedure DestroyHandle; virtual;
procedure DestroyWindowHandle; virtual;
procedure DestroyWnd; virtual;
procedure RecreateWnd;
function HandleAllocated: Boolean;
procedure HandleNeeded;
property WindowHandle: HWnd read FHandle write FHandle;
property Handle: HWND read GetHandle;
So kann man CreateWnd überschreiben und beim Erstellen/Neuerstellen drauf reagieren.
z.B. wenn man bei einer Komponente/Fenster das Drag&Drop aktiviert hat, was man beim Neuerstellen wiederherstellen muß.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Dez 2020 um 13:08 Uhr)
  Mit Zitat antworten Zitat