Lire l'évènement d'un composant crée en "runtime mode "

Résolu
tayebrabehi Messages postés 9 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 10 novembre 2008 - 16 févr. 2008 à 13:04
tayebrabehi Messages postés 9 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 10 novembre 2008 - 17 févr. 2008 à 13:11
Comment pourrai-je  lire l'évènement d'un composant crée en  'Runtime Mode' ?






Par exemple je veux créer  deux boutons et lire  le 'onclick' de chaque
un





Merci .

9 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 févr. 2008 à 13:54
Salut,

interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;



type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
    procedure Maprocedure(Sender: TObject);
  public
    { Déclarations publiques }
  end;



var
  Form1: TForm1;



implementation



{$R *.dfm}




procedure TForm1.Maprocedure(Sender: TObject);
  begin
  beep;
end;



procedure TForm1.FormCreate(Sender: TObject);
  var MonBouton : TButton;
  begin
  MonBouton : = TButton.Create(self);
  MonBouton.Parent := self;
  MonBouton.OnClick := Maprocedure;
end;
cs_gege58 Messages postés 15 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 janvier 2009
16 févr. 2008 à 18:33
Bonjour,

Je complexifie la question précédente :

je veut créer un composant dynamiquement, lequel contient plusieurs composants, par exemple un TEdit, 1 TUpDown, ...

et donc Comment lire (et le traiter) le OnClick sur les composant internes ?

Merci.

gege58
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
16 févr. 2008 à 19:11
exemple :

type
  TMonCompo = class(TComponent)
  private
    fEdit : TEdit;
    fUpDown : TUpDown;
    fOnEditClick : TNotifyEvent;
    fOnUpDownClick : TNotifyEvent;
  protected
    procedure DoEditClick(Sender: TObject); virtual;
    procedure DoUpDownClick(Sender: TObject); virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property OnEditClick : TNotifyEvent read fOnEditClick write fOnEditClick;
    property OnUpDownClick : TNotifyEvent read fOnupDownClick write fOnUpDownClick;
  end;

{ TMonCompo }

constructor TMonCompo.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fEdit := TEdit.Create(nil);
  with fEdit do
  begin
    //Parent := Self;
    //SetBounds(L, T, W, H);
    OnClick := DoEditClick;
  end;

  fUpDown := TUpDown.Create(nil);
  with fUpDown do
  begin
    //Parent := Self;
    //SetBounds(L, T, W, H);
    OnClick := DoUpDownClick;
  end;
end;

destructor TMonCompo.Destroy;
begin
  fUpDown.Free;
  fEdit.Free;
  inherited;
end;

procedure TMonCompo.DoEditClick(Sender: TObject);
begin
  { before code here }

  if Assigned(fOnEditClick) then
    fOnEditClick(Sender);

  { after code here }
end;

procedure TMonCompo.DoUpDownClick(Sender: TObject);
begin
  { before code here }

  if Assigned(fOnUpDownClick) then
    fOnUpDownClick(Sender);

  { after code here }
end;

<hr size="2" width="100%" />
http://deefaze.gnomz.com
cs_gege58 Messages postés 15 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 janvier 2009
16 févr. 2008 à 19:36
Ok,  merci beaucoup.

je vois bien maitenant comment faire dans le composant (en fait ça je l'avais trouvé dans un tuto), mais comment appeler ces événements depuis la form principale,  ma question était surtout à ce niveau  ?

Merci encore.

gege58

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
16 févr. 2008 à 19:55
avec l'exemple que je t'ai donné :

MonCompo.OnEditClick(nil);
ou
MonCompo.OnUpDownClick(nil);

note la redirection des evenements dans la classe TMonCompo grace aux procedure protégée Do*Click

<hr size="2" width="100%" />
http://deefaze.gnomz.com
cs_gege58 Messages postés 15 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 janvier 2009
16 févr. 2008 à 20:38
En fait, j'ai mal posé ma question, quand on clique sur la composant global sur la form, je dois discriminer si on a cliqué sur l'un ou sur l'autre des 2 "sous-composants" et faire le traitement ad'hoc.

Comment modifier l'exemple de Caribensila dans mon cas, avec le composant global (sur lequel on va cliquer), et ses 2 sous-composants pour que je puisse avoir le bon traitement (OnEditClick ou OnUpDownClick) ?

gege58
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 34
17 févr. 2008 à 04:17
ben ça c'est le Edit et UpDown dans le compo qui transmette l'event (puisque assigné dans le compo).

donc dans l'exemple, si tu click sur le edit ou le updown, cela appel les procedures DoEditClick ou DoUpDownClick et donc tu n'as plus qu'a mettre du code de traitement dans les deux procedure, avant ou aprés la redirection de l'event (if assigned...)

<hr size="2" width="100%" />
http://deefaze.gnomz.com
cs_gege58 Messages postés 15 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 janvier 2009
17 févr. 2008 à 12:54
Merci beaucoup, ça marche !

gege58
tayebrabehi Messages postés 9 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 10 novembre 2008
17 févr. 2008 à 13:11
Merci infiniment Caribensila c'est ce que je voulais ..
Rejoignez-nous