Bonjour,
Contexte : D2010 , Windows vista et + , douchette USB (ou pas)
Dans le cadre d'un programme de saisie de réception d'article je tente de gérer les messages via ma propre unité plutôt que par un messagebox .
Pourquoi ? parce que certains postes ont une douchette usb pour faire la saisie et que un scan = la touche enter et donc un clic sur un bouton
j'ai donc fait la forme suivante
une fonction (surchargée) permet d'afficher le message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function UnMessage(const titre,texte,son : String; const MessageType : TMessageType; const scan : boolean; const btn1Texte : string; const btn1Value:integer ; const btn1StringVal :String) : integer; overload; function UnMessage(const titre,texte,son : String;const MessageType : TMessageType; const scan : boolean; const btn1Texte : string; const btn1Value:integer ;const btn1StringVal :String; const btn2Texte : string; const btn2Value:integer ;const btn2StringVal :String) : integer; overload; function UnMessage(const titre,texte,son : String;const MessageType : TMessageType; const scan : boolean; const btn1Texte : string; const btn1Value:integer ; const btn1StringVal :String; const btn2Texte : string; const btn2Value:integer ; const btn2StringVal :String; const btn3Texte : string; const btn3Value:integer ; const btn3StringVal :String) : integer; overload;Si je n'ai pas de soucis en ce qui concerne la gestion avec le code barre (Scan=True)
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 function UnMessage(const titre,texte,son : String;const MessageType : TMessageType; const scan : boolean; const btn1Texte : string; const btn1Value:integer ; const btn1StringVal :String) : integer; var FMessage : TMessagePersonnalise; begin FMessage:=TMessagePersonnalise.Create(nil); try Fmessage.Resultat:=0; FMessage.Caption:=Titre; FMessage.Corps.Caption:=Texte; FMessage.Son.FileName:=son; FMessage.Image1.Tag:=Ord(MessageType); FMessage.RightBtn.Visible:=False; FMessage.LeftBtn.Visible:=False; FMessage.MiddleBtn.Visible:=true; FMessage.MiddleBtn.tag:=btn1Value; if FMessage.MiddleBtn.Visible then begin if Scan then FMessage.ActionOk.Caption:=btn1StringVal else if btn1Texte<>'' then FMessage.ActionOk.Caption:=btn1Texte; FMessage.ActionOk.Tag:=btn1Value; FMessage.ActionOk.Hint:=btn1StringVal; FMessage.MiddleBtn.Action:=FMessage.ActionOk; <<< je pense que le problème est ici Fmessage.ActionOk.Enabled:=not Scan end; FMessage.ScanText.Visible:=Scan; if Scan then FMessage.ActiveControl:=FMessage.Scantext; FMessage.ShowModal; Result:=FMessage.Resultat; finally FMessage.Free; end; end;
pas moyen de faire exécuter l'action du bouton !
affiche bien le bon 'icone', le bon libellé, les bons hint et Tag (j'utilise Hint pour avoir la valeur du code barre , Tag comme résultat) mais impossible de faire exécuter l'action !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FMessage.MiddleBtn.Action:=FMessage.ActionOk;
je rate quoi ?
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112 unit MsgPerso; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ImgList, JvComponentBase, JvWavePlayer, ActnList; type TMessagePersonnalise = class(TForm) ImageList1: TImageList; Panel1: TPanel; Corps: TLabel; Panel2: TPanel; LeftBtn: TBitBtn; MiddleBtn: TBitBtn; RightBtn: TBitBtn; Scantext: TEdit; Son: TJvWavePlayer; Image1: TImage; ImageList2: TImageList; ActionList1: TActionList; ActionOk: TAction; ActionRetry: TAction; ActionCancel: TAction; procedure ScantextKeyPress(Sender: TObject; var Key: Char); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormActivate(Sender: TObject); procedure ActionOkExecute(Sender: TObject); procedure ActionCancelExecute(Sender: TObject); procedure ActionRetryExecute(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } resultat : Integer; end; var MessagePersonnalise: TMessagePersonnalise; implementation {$R *.dfm} procedure TMessagePersonnalise.ActionCancelExecute(Sender: TObject); begin Resultat:=(Sender as TAction).Tag; Close; end; procedure TMessagePersonnalise.ActionOkExecute(Sender: TObject); begin Resultat:=(Sender as TAction).Tag; Close; end; procedure TMessagePersonnalise.ActionRetryExecute(Sender: TObject); begin Resultat:=(Sender as TAction).Tag; Close; end; procedure TMessagePersonnalise.FormActivate(Sender: TObject); var bmp: TBitMap; begin bmp:=TBitmap.Create; try bmp.PixelFormat := pf32bit; bmp.AlphaFormat := afDefined; ImageList1.GetBitmap(Image1.tag, bmp); Image1.Picture.Bitmap.Assign(bmp); finally bmp.Free; end; Corps.Caption:=corps.Caption+sLineBreak; end; procedure TMessagePersonnalise.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end; procedure TMessagePersonnalise.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:=Resultat<>0; end; procedure TMessagePersonnalise.ScantextKeyPress(Sender: TObject; var Key: Char); begin resultat:=0; if Key=#13 then begin if ScanText.Text=LeftBtn.Hint then Resultat:=LeftBtn.Tag; if ScanText.Text=MiddleBtn.Hint then Resultat:=MiddleBtn.Tag; if ScanText.Text=RightBtn.Hint then Resultat:=RightBtn.Tag; if resultat=0 then begin Son.Play; ScanText.Text:=''; Scantext.SetFocus; end else Close; end; end; end.
Partager