Création dynamique d'une TFrame ... problème de parent

Signaler
Messages postés
22
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 février 2007
-
cs_Loda
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
-
Bonjour,
J'essaye de créer dynamiquement une TFrame qui a été conçue en design time et de la coller dans un panel d'une fenêtre.
Au début, A La conception de ma TFrame j'ai deposé en design time des boutons, des labels et des edits, rien de mechant...
à la création de ma fenetre principale je fait

FFileManagementFrame := TFileManagementFrame.Create(Self);
FFileManagementFrame.Parent := UnPanelDeLaFrame;

Tout se passe bien ... puis après j'ai decidé de rajouter des TGroupBox à la Frame... depuis à la création de la Frame cad sur la ligne

FFileManagementFrame := TFileManagementFrame.Create(Self);

Il me sort "Le contrôle FileManagementFrame n'a pas de fenetre parente", chose qui devrait arriver à la ligne suivante ou je devais affecter le parent...
Sauriez à quoi est dû ce problème?
Merci

6 réponses

Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
salut,

je ne sais pas exactement d'ou vient ton problème. On dirait qu'il a besoin du parent lorsqu'il cree ton groupbox. Essai de faire une methode qui prend le parent et le proprio en parametre. ou surcharge le .create(aowner) en rajouteant .parent := aowner.

soit dit en passant, rien ne t'oblige a crée ta frame dynamiquement.
- ouvre ta frame
- menu contextuel : ajouter à la palette
- dans ta form avec ton panel: ajoute une frame (standard | frame)
- selectione celle qu tu veux ajouter

voilà, les mise à jour se feront toute seul, et tu peux modifier la position de tes compo ou en ajouter au design time.

aussi, le nom "UnPanelDeLaFrame" est bizare. c'est bien un panel qui n'est PAS inclue dans ta frame? (je ne pense pas que le parent d'un panel/frame puisse être un de ces fils. :-) )

A+
Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
22
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 février 2007

Je m'excuse en fait je voulais mettre un PanelDeLaForm bien entendu...
sinon pour le design time de la TFrame ... la creation dynamique est bien un besoin specifique de mon application je ne pourrais donc pas la coller en design time ...
Pour ce qui est de surcharger la methode Create ... cela ne marche pas ... en fait le plantage survient au moment ou t'appelles
inherited Create(AOwner); :-(
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
et avec ça?

constructor T.Create(aowner : TComponent);
parent := aowner.
inherited Create(AOwner);
end;

ou bien,

constructor T.Create(aowner: TComponent; aParent : TComponent);

parent := aParent.

inherited Create(AOwner);

end;

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Messages postés
22
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 février 2007

J'ai essayé cette creation ...
constructor T.Create(aowner : TComponent);
parent := aowner.
inherited Create(AOwner);

ça me fait un Access Violation : je pense que c'est parce que il faut appeller inhertied avant (afin de créer tous les champs) ... mais cet appel me fait le plantage sus precisé ... je ne sais pas ce que je pourrais faire
Messages postés
22
Date d'inscription
mercredi 16 novembre 2005
Statut
Membre
Dernière intervention
19 février 2007

En fait ce n'est pas les GroupBox qui posent probleme mais un RadioGroup auquel on rajoute des Items ... apparement il n'aime pas ça ... du coup j'ai retire les items du design time et je les ajoute dynamiquement après avoir crée et assigné le prant de la Frame ...
ça fait la même chose avec d'autres compo comme la TListBox
Voir ce Thread : http://groups.google.fr/group/borland.public.delphi.vcl.components.using/browse_thread/thread/de1136d2ee1e90f6

Je trouve ça nul mais au moins ça me permet d'avancer ... si vous avez d'autres suggestions n'hesitez pas
Merci
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
" je pense que c'est parce que il faut appeller inhertied avant". ouai, en fait ça semble logique... (je vais reprndre un café je coirs...)

"j'ai retire les items du design time"
tiens, bin j'ai appris qqch aujourd'hui...

merci, de nous indiquer ta solution et ta source d'information (tout le monde ne le fait pas, et c'est bien dommage)

bonne continuation,

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.