| Re: D7E : errore "control has no parnet window" utilizzando frame ereditati |
|
 |
|
 |
|
 |
|
 |
Group: it.comp.lang.delphi · Group Profile
Author: Alberto SalvatiAlberto 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..."
|