unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation type TKeyType = (ktCapsLock, ktNumLock, ktScrollLock); procedure SetLedState(KeyCode: TKeyType; bOn: Boolean); var KBState: TKeyboardState; Code: Byte; begin case KeyCode of ktScrollLock: Code:=VK_SCROLL; ktCapsLock: Code:=VK_CAPITAL; ktNumLock: Code:=VK_NUMLOCK; end; GetKeyboardState(KBState); if (Win32Platform = VER_PLATFORM_WIN32_NT) then begin if Boolean(KBState[code]) <> bOn then begin keybd_event(Code,MapVirtualKey(Code, 0),KEYEVENTF_EXTENDEDKEY,0); keybd_event(Code,MapVirtualKey(Code, 0),KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); end; end else begin KBState[code] := Ord(bOn); SetKeyboardState(KBState); end; end; //------------- var a,b,c:boolean; {$R *.dfm} procedure TForm1.SpeedButton1Click(Sender: TObject); begin if not a then begin SetLedState(ktCapsLock, True); // CapsLock on a:=not(a); end else begin SetLedState(ktCapsLock, False); // CapsLock off a:=not(a); end; end; procedure TForm1.SpeedButton2Click(Sender: TObject); begin if not b then begin SetLedState(ktNumLock, True); // NumLock on b:=not(b); end else begin SetLedState(ktNumLock, False); // NumLock off b:=not(b); end; end; procedure TForm1.SpeedButton3Click(Sender: TObject); begin if not c then begin SetLedState(ktScrollLock, True); // ScrollLock on c:=not(c); end else begin SetLedState(ktScrollLock, False); // ScrollLock off c:=not(c); end; end; end.