Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008
-
11 juin 2007 à 15:02
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
12 juin 2007 à 03:41
Bonjour!
Je me suis lancée dans la création de mon premier composant graphique, mais j'ai un petit probleme.
En gros, je veut creer un composant de type Panel avec des composant (Tedit, TLabel, etc... ) deja incorporer dessus.
Jusque là pas de soucis! Le probleme vient lorsque je veut ajouter un TCombobox...
Voilà un bout de code pour vous permettre de comprendre:
type TMyPanelPerso = class(TCustomPanel)
private
fMyBox : TComboBox;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
procedure TMyPanelPerso .OrganizeComponent;
begin
with fMyBox do
begin
Parent := Self;
Top := 14;
Left := 90;
Width := 65;
Items.Add('blablabla1');
Items.Add('blablabla2');
Items.Add('blablabla3');
ItemIndex := 0;
Style := csDropDownList;
end;
end;
J'ai laissé ici que le code concernant la Combobox. En rouge le code qui pose probleme avec l'erreur 'control has no parent windows' . A noté que le reste de mon code fonctionne (il y a egalement des Edit, Label, RadioButton, etc...) et que sans les lignes en rouge cela fonctionne parfaitement.
Ma question est donc de savoir comment remplir ma combobox, puisque apparement je ne le fait pas au bon endroit.
En esperant que j'ai été a peut pret clair dans ma requete!
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 11 juin 2007 à 17:17
constructor TMyPanelPerso.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Height := 88;
Width := 272;
if AOwner is TWinControl then
Parent := TWinControl(AOwner)
else
begin
MessageDlg('Ce composant doit etre créé dans un descendant de TWinControl',mtWarning,[mbOk],0);
exit;
end;
Sat83
Messages postés166Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention13 octobre 2008 11 juin 2007 à 18:05
Re-bonjour!
Merci fOxi! Ca marche! Tu est mon heros!
J'ai encore deux autres petis soucis avec la création de mon composant:
1)
Dans le constructeur de mon TMyPanelPerso, je fait un
Caption := '' ;
Lorsque je creé mon composant dynamiquement, ca marche. Par contre, en mode conception si je place mon composant sur ma fiche, il y a un horrible 'MyPanelPerso1' en plein milleu! Si j'execute le programme, ça disparait (donc il apparait juste en mode conception). Comment faire pour ne pas l'affiché non plus en mode conception?
2)
J'ai creer une propriété a mon Panel, pour permettre en mode conception d'afficher tout les element du Panel, ou juste une partie:
property toutMontrer : boolean read fMontrer write setMontrerTout;
où setMontrerTout est une fonction qui prend un boolean en parametre et qui rend visible ou non les composant en questions.
Lorsque dynamiquement dans mon programme je fais:
monPanel.toutMontrer : = True;
monPanel.toutMontrer := False;
ca marche sans probleme. Mais en mode conception, le changement de ce parametre (dans l'inspecteur d'objet) ne produit aucun effet.
Si jamais quelqu'un a une idée sur ces deux points, je les remercie d'avance!