Советы по Delphi

         

Индикация статуса клавиш II


Может мне кто-нибудь сказать, где найти код, который помог бы мне связать текст строки состояния с состоянием клавиш caps lock, num lock и др.?

Событие 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]



Содержание раздела