VAR KS : TKeyboardState;...GetKeyboardState(KS);IF Odd(KS[VK_NUMLOCK]) THEN {caps lock нажат}... VK_VK_CAPITAL... VK_SCROLL... VK_INSERT |
Событие OnIdle происходит каждый раз, когда приложение свободно. С помощью обработчика данного события можно сделать так, чтобы во время "простоя" приложение могло бы осуществлять второстепенные задачи. В это время ваше приложение ожидает наступление какого-то события, например, ввод пользователем новой величины.
TIdleEvent - процедурный тип, имеющий логический параметр Done со значением по умолчанию True. Когда Done равен True, после обработки события OnIdle вызывается функция Windows API WaitMessage. WaitMessage передает управление другим приложениям до тех пор, пока в очереди сообщений вашего приложения не появится новое сообщение. Если Done равно False, WaitMessage не вызывается.
Итак, как мы можем решить нашу задачу в свете вышесказанного:
Добавьте 4 компонента Checkbox к вашему компоненту Statusbar и сделайте следующее объявление в секции Private вашей формы:
|
procedure AppOnIdle(Sender: TObject; var Done: Boolean); |
Добавьте в секции реализации:
procedure TForm1.AppOnIdle(Sender: TObject; var Done: Boolean); begin CheckBox1.Checked := Odd(GetKeyState(VK_CAPITAL));CheckBox2.Checked := Odd(GetKeyState(VK_SHIFT));CheckBox3.Checked := Odd(GetKeyState(VK_NUMLOCK));CheckBox4.Checked := Odd(GetKeyState(VK_SCROLL));Done := False;end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnIdle := AppOnIdle;end; |
[000617]