Re: D7E : errore "control has no parnet window" utilizzando frame ereditati
  Home FAQ Contact Sign in
it.comp.lang.delphi only
 
Advanced search
POPULAR GROUPS

more...

 Up
Re: D7E : errore "control has no parnet window" utilizzando frame ereditati         

Group: it.comp.lang.delphi · Group Profile
Author: Alberto Salvati
Date: Dec 18, 2006 10:05

Ho messo da parte il problema per tutto il giorno e l'ho riaffrontato
poco fa, risolvendolo.
Posto qui un workaround in modo da evitare ad altri il seccarsi la
lingua a causa delle numerose parolacce..

Praticamente, il casino si scatena se un frame contiene dei componenti
che contengono a loro volta altri componenti, come il pagecontrol, ma
anche un tpanel nel quale si mette qualsiasi cosa.

Il tutto è dovuto al fatto che il frame non ha il parent e puo averlo
solo dopo che è stato creato.
Ma ovviamente alla creazione lui tenta di usare i costruttori dei
componenti che contiene e non avendo il parent questi costruttori vanno
in crash.
Ovviamente, anche utilizzando un costruttore proprio la cosa non cambia
visto che x ovvi motivi nel 99%% dei casi la prima riga è inherited
Create(AOwner)...
Il workaoround consiste nel creare un override del metodo CreateWnd da
dichiarare nella sezione protected per non incorrere nel warning di
diverso livello di visibilita.
Il codice è semplicissimo:

protected
procedure CreateWnd; override;
...

implementation

procedure TframeBaseEdit.CreateWnd;
begin

x := TWinControl(Owner);
if Assigned(Owner) then
Self.Parent := TWinControl(Owner);

inherited;
end;

Ribadisco che si tratta di un workaround...
Se qlc ha una soluzione migliore e la pubblica qui (davanti alla quale
la mia sembra molto lassativa e cinofallica...) ovviamente la butto
via.

Pax vobiscum.

A.

"Mentre 'a mmare e' 'nfosa, l'acqua..."
1 Comment
diggit! del.icio.us! reddit!