Советы по Delphi

       

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


Вы можете отслеживать состояние "индикаторных" клавиш с помощью таймера с интервалом, скажем, в 100мс. Я просто считываю состояние клавиш следующим образом:

VAR KS : TKeyboardState;...GetKeyboardState(KS);IF Odd(KS[VK_NUMLOCK]) THEN {caps lock нажат}... VK_VK_CAPITAL... VK_SCROLL... VK_INSERT
[000404]


Может мне кто-нибудь сказать, где найти код, который помог бы мне связать текст строки состояния с состоянием клавиш 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]



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