1 unit formkeyoption;
2 
3 {$mode objfpc}{$H+}
4 
5 interface
6 
7 uses
8   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
9   StdCtrls;
10 
11 type
12   { TfmKeyOpt }
13 
14   TfmKeyOpt = class(TForm)
15     ButtonPanel1: TButtonPanel;
16     chkCtrl: TCheckBox;
17     chkAlt: TCheckBox;
18     chkShift: TCheckBox;
19     chkMeta: TCheckBox;
20     ed: TComboBox;
21     procedure FormCreate(Sender: TObject);
22   private
23     { private declarations }
24   public
25     { public declarations }
26   end;
27 
DoDialogHotkeynull28 function DoDialogHotkey(S: string): string;
29 
30 implementation
31 
32 {$R *.lfm}
33 
DoDialogHotkeynull34 function DoDialogHotkey(S: string): string;
35 var
36   n: integer;
37 begin
38   Result:= S;
39   with TfmKeyOpt.Create(nil) do
40   try
41     chkCtrl.Checked:= Pos('Ctrl+', S)>0;
42     chkAlt.Checked:= Pos('Alt+', S)>0;
43     chkShift.Checked:= Pos('Shift+', S)>0;
44     chkMeta.Checked:= Pos('Meta+', S)>0;
45 
46     repeat
47       n:= Pos('+', S);
48       if n=0 then Break;
49       Delete(S, 1, n);
50     until false;
51 
52     ed.ItemIndex:= ed.Items.IndexOf(S);
53     if ed.ItemIndex<0 then
54       ed.ItemIndex:= 0;
55 
56     case ShowModal of
57       mrOk:
58         begin
59           Result:= ed.Text;
60           if chkMeta.Checked then Result:= 'Meta+'+Result;
61           if chkShift.Checked then Result:= 'Shift+'+Result;
62           if chkAlt.Checked then Result:= 'Alt+'+Result;
63           if chkCtrl.Checked then Result:= 'Ctrl+'+Result;
64         end;
65       mrClose:
66         Result:= '';
67     end;
68   finally
69     Free;
70   end;
71 end;
72 
73 { TfmKeyOpt }
74 
75 procedure TfmKeyOpt.FormCreate(Sender: TObject);
76 var
77   i: integer;
78 begin
79   for i:= Ord('A') to Ord('Z') do
80     ed.Items.Add(Chr(i));
81   for i:= 0 to 9 do
82     ed.Items.Add(Inttostr(i));
83   for i:= 1 to 12 do
84     ed.Items.Add('F'+Inttostr(i));
85 
86   ed.Items.Add('Left');
87   ed.Items.Add('Right');
88   ed.Items.Add('Up');
89   ed.Items.Add('Down');
90   ed.Items.Add('Ins');
91   ed.Items.Add('Del');
92   ed.Items.Add('Home');
93   ed.Items.Add('End');
94   ed.Items.Add('PgUp');
95   ed.Items.Add('PgDn');
96   ed.Items.Add('Enter');
97   ed.Items.Add('BkSp');
98   ed.Items.Add('Tab');
99   ed.Items.Add('Esc');
100   ed.Items.Add('-');
101   ed.Items.Add('=');
102   ed.Items.Add('`');
103   ed.Items.Add(',');
104   ed.Items.Add('.');
105   ed.Items.Add(';');
106   ed.Items.Add('''');
107   ed.Items.Add('\');
108   ed.Items.Add('/');
109   ed.Items.Add('[');
110   ed.Items.Add(']');
111 
112   for i:= 0 to 9 do
113     ed.Items.Add('Num'+Inttostr(i));
114   ed.Items.Add('NumPlus');
115   ed.Items.Add('NumMinus');
116   ed.Items.Add('NumMul');
117   ed.Items.Add('NumDiv');
118   ed.Items.Add('NumDot');
119   ed.Items.Add('NumClear');
120 
121   ed.Items.Add('NumLock');
122   ed.Items.Add('ScrollLock');
123   ed.Items.Add('CapsLock');
124   ed.Items.Add('Break');
125   ed.Items.Add('PopUp');
126 end;
127 
128 end.
129 
130