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 :
et le code de l'unité sur laquelle j'ai déposé mon composant clavier ainsi qu'un TBoutonCoinRond seul :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Que faut-il ajouter à mon composant Clavier pour qu'un click sur chacune des touches déclenche un évènement dans ma fiche ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Cordialement.
Pierre.
Partager