Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Änderung des Handles abfangen


Heiko - Mi 11.08.10 00:05
Titel: Änderung des Handles abfangen
Hallo,

ich habe eine Klasse von TWinControl abgeleitet. Da ich dort immer wieder mit dem Handle arbeite, muss ich wissen, wann sich das Handle ändert. Wie bekomme ich heraus, wann das aktuelle Handle ungültig wird, und wann ein neues verfügbar ist.

Hintergrund ist der, dass bei SetParent das Handle sich von dem Objekt und den meisten Unterobjekten ändert.

Besten Dank im Voraus
Heiko


BenBE - Mi 11.08.10 04:58

IIRC gab's da zwei Methoden AllocWnd und ReleaseWnd, die für die Handle-Verwaltung verwendet werden. Müssas aber noch mal im VCL-Source nachschlagen ...

Alternativ kannst Du schauen, inwiefern Du (da die VCL IIRC das RefCnted hat) verhinderst, dass das Handle freigegeben wird, da dies für SetParent eigentlich nicht nötig ist.


Heiko - Mi 11.08.10 14:45

CreateHandle bzw. DestroyHandle wäre die korrekte Antwort gewesen ;). CreateWnd wird nur einmal aufgerufen beim erzeugen des Objektes, danach scheinbar gar nicht mehr. Und DestroyWnd wird irgendwie auch nicht aufgerufen.

Jetzt habe ich aber das Problem, dass mein Desktutor 2x aufgerufen wird, wenn sich der parent zwischendurch ändert *grübel*.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TDemoForm.FormCreate(Sender: TObject);
begin
  SunFlow := TSunFlow.Create(self);
  SunFlow.Parent := self;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  SunFlow.Parent := Form2;
end;

procedure TDemoForm.FormDestroy(Sender: TObject);
begin
  SunFlow.Free;
end;


BenBE - Mi 11.08.10 16:55

Ich erwähnte doch, dass ich auch noch mal konkret in den VCL-Source schauen müsste.