-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmain.pas
67 lines (55 loc) · 1.32 KB
/
main.pas
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
unit main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, System.ImageList, Vcl.ImgList;
type
TMainForm = class(TForm)
TrayIcon: TTrayIcon;
ImageList: TImageList;
Timer: TTimer;
procedure FormCreate(Sender: TObject);
procedure TrayIconDblClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
private
procedure LoadIcon(aKBDState: string);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
function GetKBDState: string;
begin
result := '00';
if GetKeyState(VK_NUMLOCK) = 1 then result[1] := '1';
if GetKeyState(VK_CAPITAL) = 1 then result[2] := '1';
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Hide();
WindowState := wsMinimized;
LoadIcon(GetKBDState);
end;
procedure TMainForm.LoadIcon(aKBDState: string);
const
states: array[0..3] of string = ('00', '01', '10', '11');
var
i: integer;
begin
for i := Low(states) to High(states) do
if states[i] = aKBDState then begin
TrayIcon.IconIndex := i;
BREAK;
end;
end;
procedure TMainForm.TimerTimer(Sender: TObject);
begin
LoadIcon(GetKBDState);
end;
procedure TMainForm.TrayIconDblClick(Sender: TObject);
begin
Close;
end;
end.