...

Листинг 3.23.

Запуск и остановка огней

var

initCaps, initNum, initScroll: Boolean; //Первоначальные

//состояния клавиш

curCaps, curNum, curScroll: Boolean; //Текущие состояния

//клавиш

procedure TForm1.cmbStartClick(Sender: TObject);

begin

if cmbStart.Caption = \'Старт\' then

begin

//Сохраняем первоначальные состояния клавиш

initCaps := (GetKeyState(VK_CAPITAL) and 1) <> 0;

initNum := (GetKeyState(VK_NUMLOCK) and 1) <> 0;

initScroll := (GetKeyState(VK_SCROLL) and 1) <> 0;

//Включаем только Caps Lock

if not initCaps then PressKey(VK_CAPITAL);

curCaps := True;

if initNum then PressKey(VK_NUMLOCK);

curNum := False;

if initScroll then PressKey(VK_SCROLL);

curScroll := False;

//Запускаем «бегущие огни»

Timer1.Interval := StrToInt(txtInterval.Text);

Timer1.Enabled := True;

cmbStart.Caption := \'Стоп\

end

else

begin

//Останавливаем «бегущие огни»

Timer1.Enabled := False;

cmbStart.Caption := \'Старт\

//Восстанавливаем первоначальные состояния клавиш

if initCaps <> curCaps then PressKey(VK_CAPITAL);

if initNum <> curNum then PressKey(VK_NUMLOCK);

if initScroll <> curScroll then PressKey(VK_SCROLL);

end;

end;

В начале листинга 3.23 приведены используемые глобальные переменные:

• initCaps, initNum, initScroll – для сохранения первоначального состояния клавиш Caps Lock, Num Lock и Scroll Lock с целью его восстановления при остановке огней, чтобы не раздражаться необходимостью вручную устанавливать состояния этих клавиш;

• curCaps, curNum, curScroll – для быстрого определения текущего состояния клавиш (вместо постоянного обращения к функциям типа GetKeyboardState).

Перемещение огней происходит при каждом срабатывании таймера Timer1 (листинг 3.24).

Загрузка...