Problème de récupération de valeur d'un composant que j'ai créé
Bonjour à toutes et à tous,
A partir d'un composant TBoutonCoinRond que j'ai créé, je réalise un autre composant qui est un clavier numérique. Ce nouveau composant est en lui même un TBoutonCoinRond dans lequel je dépose d'autres TBoutonCoinRond représentant chaque touche numérique.
Dans la procédure "OnClick" de la fiche relative à ce composant, je souhaite récupérer la valeur "Titre" (représentant la valeur numérique) de la touche sur laquelle je clique. Mais cela ne fonctionne pas. Quand je clique sur une touche, la procédure "OnClick" ne se déclenche pas. Par contre, la procédure interne "ToucheClick" de mon composant est bien activée et récupère bien la valeur "Titre" de la touche cliquée.
Voici le code de mon composant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| unit ClavierN;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, BoutonArrondi;
type
TClavierNum = class(TBoutonCoinRond)
private
Touche: array[0..11] of TBoutonCoinRond;
FValTouche: String;
protected
public
property ValTouche: String read FValTouche write FValTouche;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Paint; override;
procedure ToucheClick(Sender: TObject);
published
end;
procedure Register;
implementation
procedure Register;
begin
{$I claviern_icon.lrs}
RegisterComponents('ChP',[TClavierNum]);
end;
constructor TClavierNum.Create(AOwner: TComponent);
var
i: Integer;
begin
inherited Create(AOwner);
Parent:= TWinControl(AOwner);
Actif:= False;
CouleurCoin:= clForm;
Width:= 280;
Height:= 368;
for i:= 0 to 11 do
begin
Touche[i]:= TBoutonCoinRond.Create(Self);
Touche[i].Parent:= TWinControl(Self);
Touche[i].Actif:= True;
Touche[i].CouleurCoin:= clWhite;
Touche[i].Width:= 80;
Touche[i].Height:= 80;
Touche[i].OnClick:= @ToucheClick;
end;
Touche[0].Titre:= '7';
Touche[1].Titre:= '5';
Touche[2].Titre:= '3';
Touche[3].Titre:= '*';
Touche[4].Titre:= '8';
Touche[5].Titre:= '6';
Touche[6].Titre:= '1';
Touche[7].Titre:= '0';
Touche[8].Titre:= '9';
Touche[9].Titre:= '4';
Touche[10].Titre:= '2';
Touche[11].Titre:= '#';
end;
procedure TClavierNum.Paint;
var
i: Integer;
begin
inherited Paint;
for i:= 0 to 11 do
begin
Touche[i].Left:= 12+88*(i mod 3);
Touche[i].Top:= 12+88*(i mod 4);
end;
end;
procedure TClavierNum.ToucheClick(Sender: TObject);
begin
ValTouche:= TBoutonCoinRond(Sender).Titre; //Récupère bien la valeur "Titre" de la touche cliquée.
end;
destructor TClavierNum.Destroy;
var
i: Integer;
begin
for i:= 0 to 11 do
Touche[i].Free;
inherited Destroy;
end;
end. |
et le code de l'unité sur laquelle j'ai déposé mon composant clavier ainsi qu'un TBoutonCoinRond seul :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ClavierN,
BoutonArrondi;
type
{ TForm1 }
TForm1 = class(TForm)
BoutonCoinRond1: TBoutonCoinRond;
ClavierNum1: TClavierNum;
Edit1: TEdit;
procedure BoutonCoinRond1Click(Sender: TObject);
procedure ClavierNum1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.ClavierNum1Click(Sender: TObject); // Cet évènement ne se déclenche pas lors de l'appui sur une des touches du clavier, mais se déclenche lorsque je je clique entre les touches, c'est-à-dire sur le composant TBoutonCoinRond support des touches.
begin
Edit1.Text:= TClavierNum(Sender).ValTouche;
end;
procedure TForm1.BoutonCoinRond1Click(Sender: TObject); //
begin
Edit1.Text:= BoutonCoinRond1.Titre; // Récupère bien la valeur "Titre" de BoutonCoinRond1
end;
end. |
Que faut-il ajouter à mon composant Clavier pour qu'un click sur chacune des touches déclenche un évènement dans ma fiche ?
Cordialement.
Pierre.