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ß.