Composant dans un Composant / Component dans un Component.

Résolu
MCSTN Messages postés 5 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 28 mai 2011 - 27 mai 2011 à 19:09
MCSTN Messages postés 5 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 28 mai 2011 - 28 mai 2011 à 12:29
Salut à toutes et tous et merci aux uploaders de CodeS-SourceS.

J'aimerais que quelqu'un m'explique pourquoi le code suivant compile mais ne fonctionne pas.
Je souhaiterais simplement affecter un événement au bouton construis dans le panel.

Si j'utilise ce composant "TtstPanel" il s'affiche, le bouton est visible, mais je n'obtien
aucune réaction quand je clique sur ce dernier!?

De toute évidence je n'ai pas compris quelque chose...

Notez que tous les exemples didacticiels etc.. que j'ai pu glaner ici et sur le web ne parlent jamais de composants dans un composant. Avis aux auteurs de tutos!

Voici mon code; si un bon Samaritain veux bien y jetter un oeil.


unit Panel;

INTERFACE
//=========================================================
uses
SysUtils, Classes, Controls, ExtCtrls, StdCtrls;

type
TtstPanel = class(TPanel)
private
FMyButton :TButton; //Déclaration de mon bouton
FMyButtonOnClick :TNotifyEvent; //Déclaration de mon événement
{ Private declarations }
protected
{ Protected declarations }
public


constructor Create (AOwner: TComponent); override;
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

IMPLEMENTATION
//=========================================================

procedure FMyButtonOnClick (Sender : TObject); //Evénement
BEGIN
TButton(Sender).Caption := 'Clicked!';
END;

constructor TtstPanel.create(AOwner:TComponent);
BEGIN
inherited Create(AOwner);
FMyButton := TButton.create(self); //Creation du bouton
FMyButton.Parent := Self; //Ratachement au Panel
FMyButton.Caption := 'Not Clicked'; //Init du Bouton
FMyButton.OnClick := FMyButtonOnClick; //Assignation de l'événement à Onclick
END;


procedure Register;
begin
RegisterComponents('Test', [TtstPanel]);
end;

end.

2 réponses

cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
28 mai 2011 à 09:43
Salut,
FMyButtonOnClick est une procedure
donc remplace
private
    FMyButtonOnClick :TNotifyEvent; //Déclaration de mon événement

par
private
    procedure FMyButtonOnClick(Sender:TObject); //Déclaration de mon événement

@+yanb
3
MCSTN Messages postés 5 Date d'inscription samedi 17 avril 2004 Statut Membre Dernière intervention 28 mai 2011
28 mai 2011 à 12:29
Salut Yanb , Merci pour ta réponse.

Je me doutais bien qu'a force de chercher, je passais complétement à côté de l'évidence, mais la !
Il va falloir que je rebranche le cerveau!!!!
0
Rejoignez-nous