Autor Beitrag
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 11.08.10 00:05 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Heiko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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*.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 11.08.10 16:55 
Ich erwähnte doch, dass ich auch noch mal konkret in den VCL-Source schauen müsste.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.