insérer un item dans listCheckBox à la conception... [Delphi 6 sniff] - Programmation
Marsh Posté le 19-02-2002 à 16:59:05
une petite réctification et un petit up au passage :
alors, en fait, les propriétés par défaut fonctionnent très bien...
à la conception, si j'insère le composant dans la fiche (en enlevant le addExam dans le create du composant ), ça marche bien, les prop ont bien leurs valeurs par défaut...
à l'éxecution, l'appel de addExam ne pose toujours pas de pb...
alors, en réalité, le pb ne se pose qu'à l'insertion dans la fiche... si je mêt addExam dans le create du composant, j'obtient systèmatiquement l'erreur " le composant "" n'a pas de fenêtre parente"...
argl ! comprends pas... à l'insertion dans une fiche, delphi appelle bien la méthode create du composant ?! est ce qu'il en appelle une autre que je pourrais redéfinir pour que ça fonctionne ??
Marsh Posté le 19-02-2002 à 17:15:51
à première vue je sais pas...
j'ai déjà eu ce genre de problème mais je sais plus comment je l'avais arrangé...
parfois c'est quand le parent est un composant n'acceptant pas d'autres compos, genre un Edit qui devient parent d'un autre machin sans qu'on lui ai dit qu'il devait accepter les autres controles.
Marsh Posté le 19-02-2002 à 17:20:13
antp a écrit a écrit : à première vue je sais pas... j'ai déjà eu ce genre de problème mais je sais plus comment je l'avais arrangé... parfois c'est quand le parent est un composant n'acceptant pas d'autres compos, genre un Edit qui devient parent d'un autre machin sans qu'on lui ai dit qu'il devait accepter les autres controles. |
et une fonction autre que create appelée par delphi lors de l'insertion d'un composant ? ça ne te dit rien ?
parceque ce que je comprend pas, c que lappel de addExam ne pose aucun pb à l'éxecution !
[jfdsdjhfuetppo]--Message édité par Moustaaki--[/jfdsdjhfuetppo]
Marsh Posté le 19-02-2002 à 17:29:23
bhen y a le Loaded qui intervient une fois que le Create est terminé
public
procedure Loaded; override;
Marsh Posté le 19-02-2002 à 17:57:18
antp a écrit a écrit : bhen y a le Loaded qui intervient une fois que le Create est terminé public procedure Loaded; override; |
oui, mais il va aussi être appelé à la création de la fenêtre contenant le composant... et donc, mon petit texte uniquement destiné à faire un apperçu (pour appercevoir les modifications de font, c qd même plus pratique) sera là et ça ne me plait pas vraiment... mais bon, si c'est la seule solution, je m'en contenterais !
il suffira que je fasse un clear sur la liste lorsque je l'utiliserais...
et bien merci, en tout cas
Marsh Posté le 19-02-2002 à 16:12:34
erreur du type : "le composant "" n'a pas de fenetre parente" à l'insertion dans une fiche...
alors, après reflexion : est-ce qu'il existe un fonction appelée par delphi lorsqu'il a fini d'insérer un composant dans une fiche ?
mais il faudrait que cette fonction ne soit appellée qu'à la conception(insertion dans une fiche et non pas à l'execution(execution du programme contenant une fiche utilisant ce composant)...
bon je vous laisse une partie du code du composant au cas où ça vienne de là...
TExamListCheckView= class(TPanel, IExamList
checkList: TCheckListBox;
panTitre: TPanel;
titre: TLabel;
[...]
published
propertry aExmLstListWidth: integer read listWidth write setListWidth default 150 ;
property aExmLstListHeight: integer read listHeight write setListHeight default 87;
constructor TExamListCheckView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// je donne bien des parents à tout mes composants :
panTitre := TPanel.Create(self);
titre := TLabel.Create(panTitre);
checkList := TCheckListBox.Create(self);
panTitre.InsertControl(titre);
InsertControl(panTitre);
InsertControl(checkList);
titre.Caption := 'Vaisseaux sélectionnés';
titleFont := TFont.create;
listFont := TFont.create;
checkList.OnClickCheck := onClickCheckProc;
OnResize := onResizeProc;
// j'ai rajourté ces quatres lignes pour voir si ça marchait mieux...
checkList.width := 150;
checkList.height := 87;
listWidth := 150;
listHeight := 87;
addExam('Vaisseaux selectionné 1 D';
addExam('Vaisseaux selectionné 1 G';
end;
// procedure addExam :
procedure TExamListCheckView.addExam(examName: string);
begin
checkList.Items.Add(examName);
end;
l'erreur viens de addExam... si j'enlève les deux addExam du create, le composant s'insère bien dans la fiche et on voit tous les controls, preuve que le panel de titre, le titre et le checkboxlist ont bien été inséré !
à l'éxution, pas de pb non plus... on peut même appelé addExam à l'execution...
alors, le truc bysarre, c que si je compile sans addExam dans le create, je peux à l'éxecution appeler la fonction addExam dans la fiche crée...
puis ensuite, si je recompile le composant en ajoutant addExam dans le create de celui ci sans supprimer son instance auparavent créée dans la fiche, 'Vaisseaux selectionné 1 D' et 'Vaisseaux selectionné 1 G' apparaissent bien dans la liste... !!
comment résoudre ce pb ?
[jfdsdjhfuetppo]--Message édité par Moustaaki--[/jfdsdjhfuetppo]