130 lines
2.6 KiB
ObjectPascal

unit formkeyoption;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
StdCtrls;
type
{ TfmKeyOpt }
TfmKeyOpt = class(TForm)
ButtonPanel1: TButtonPanel;
chkCtrl: TCheckBox;
chkAlt: TCheckBox;
chkShift: TCheckBox;
chkMeta: TCheckBox;
ed: TComboBox;
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
function DoDialogHotkey(S: string): string;
implementation
{$R *.lfm}
function DoDialogHotkey(S: string): string;
var
n: integer;
begin
Result:= S;
with TfmKeyOpt.Create(nil) do
try
chkCtrl.Checked:= Pos('Ctrl+', S)>0;
chkAlt.Checked:= Pos('Alt+', S)>0;
chkShift.Checked:= Pos('Shift+', S)>0;
chkMeta.Checked:= Pos('Meta+', S)>0;
repeat
n:= Pos('+', S);
if n=0 then Break;
Delete(S, 1, n);
until false;
ed.ItemIndex:= ed.Items.IndexOf(S);
if ed.ItemIndex<0 then
ed.ItemIndex:= 0;
case ShowModal of
mrOk:
begin
Result:= ed.Text;
if chkMeta.Checked then Result:= 'Meta+'+Result;
if chkShift.Checked then Result:= 'Shift+'+Result;
if chkAlt.Checked then Result:= 'Alt+'+Result;
if chkCtrl.Checked then Result:= 'Ctrl+'+Result;
end;
mrClose:
Result:= '';
end;
finally
Free;
end;
end;
{ TfmKeyOpt }
procedure TfmKeyOpt.FormCreate(Sender: TObject);
var
i: integer;
begin
for i:= Ord('A') to Ord('Z') do
ed.Items.Add(Chr(i));
for i:= 0 to 9 do
ed.Items.Add(Inttostr(i));
for i:= 1 to 12 do
ed.Items.Add('F'+Inttostr(i));
ed.Items.Add('Left');
ed.Items.Add('Right');
ed.Items.Add('Up');
ed.Items.Add('Down');
ed.Items.Add('Ins');
ed.Items.Add('Del');
ed.Items.Add('Home');
ed.Items.Add('End');
ed.Items.Add('PgUp');
ed.Items.Add('PgDn');
ed.Items.Add('Enter');
ed.Items.Add('BkSp');
ed.Items.Add('Tab');
ed.Items.Add('Esc');
ed.Items.Add('-');
ed.Items.Add('=');
ed.Items.Add('`');
ed.Items.Add(',');
ed.Items.Add('.');
ed.Items.Add(';');
ed.Items.Add('''');
ed.Items.Add('\');
ed.Items.Add('/');
ed.Items.Add('[');
ed.Items.Add(']');
for i:= 0 to 9 do
ed.Items.Add('Num'+Inttostr(i));
ed.Items.Add('NumPlus');
ed.Items.Add('NumMinus');
ed.Items.Add('NumMul');
ed.Items.Add('NumDiv');
ed.Items.Add('NumDot');
ed.Items.Add('NumClear');
ed.Items.Add('NumLock');
ed.Items.Add('ScrollLock');
ed.Items.Add('CapsLock');
ed.Items.Add('Break');
ed.Items.Add('PopUp');
end;
end.