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

Signaler
Messages postés
9
Date d'inscription
dimanche 20 janvier 2008
Statut
Membre
Dernière intervention
10 novembre 2008
-
Messages postés
9
Date d'inscription
dimanche 20 janvier 2008
Statut
Membre
Dernière intervention
10 novembre 2008
-
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

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
15
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;
Messages postés
15
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
25 janvier 2009

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
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
34
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
Messages postés
15
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
25 janvier 2009

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
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
34
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
Messages postés
15
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
25 janvier 2009

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
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
34
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
Messages postés
15
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
25 janvier 2009

Merci beaucoup, ça marche !

gege58
Messages postés
9
Date d'inscription
dimanche 20 janvier 2008
Statut
Membre
Dernière intervention
10 novembre 2008

Merci infiniment Caribensila c'est ce que je voulais ..