UNDER CONTROL

Xakep, номер #038, стр. 038-058-2


Чтобы получить доступ к отдельному элементу массива нужно написать следующий код:

r[4]:=Значение;

Вот так можно присвоить 4-му элементу массива какое-нибудь значение.

Первый массив SySColorArray - это массив из 13 (хорошее число) целых чисел. Так как это у меня константа, то я должен поставить в конце знак "равно" и в скобках перечислить все значения массива. В качестве констант я перечисляю значения системных цветов, которые будут меняться (COLOR_ACTIVEBORDER, COLOR_ACTIVECAPTION и т. д.). Я буду случайным образом выбирать из этого массива имя системного цвета и менять его значение.

Что такое COLOR_ACTIVEBORDER, COLOR_ACTIVECAPTION... Это тоже константы. Под каждой из них спрятано простое число. Например, COLOR_ACTIVEBORDER - это простое число 10. Каждое такое число означает номер системного цвета. Я мог бы использовать вместо констант числа, но это будет неудобно, и читать такой код просто противно.

Вторая константа ColorArray - массив из 10 цветов. Из него мы будем выбирать случайным образом любой цвет и устанавливать его в систему.

Сам код процедуры очень прост и состоит только из вызова функции SetSysColors. В качестве параметра я указываю следующие значения:

1. Единица - я буду менять один системный цвет.

2. SySColorArray[random(13)] - выбираю из массива SySColorArray случайное имя цвета от 0 до 13 с помощью вызова random(13). Этот системный цвет будет изменен.

3. ColorArray[random(10)] - выбираю из массива ColorArray случайное значение цвета от 0 до 10 с помощью вызова random(10). Этот цвет будет установлен в качестве системного.

АНИМАЦИЯ КНОПОК

Теперь проанимируем кнопки на клаве. Для этого по нажатию второй кнопки запусти второй таймер:

procedure TForm2.Button1Click(Sender: TObject);

begin

Timer2.Enabled:=true;

end;

Теперь создай обработчик события для второго таймера и в нем напиши содержимое листинга 2. Тут в основном простая математика, для вычисления, какую кнопку сейчас зажечь, а какую потушить. Самым интересным является вызов процедуры SetState. Она должна менять состояние клавиш. Но этой процедуры нет среди стандартных библиотек в Delphi, ее нужно написать. Перепиши листинг 3 куда-нибудь в свой модуль. Главное - выше, чем обработчик события для второго таймера.

В процедуре SetState всего три строчки кода. В первой я получаю текущее состояние клавиатуры с помощью WinAPI функции GetKeyboardState. Результатом будет переменная-массив KeyState. Во второй строчке я изменяю состояние нужной клавиши. И в последней строке происходит установка измененного состояния клавы с помощью SetKeyboardState.

ПРЕЛЮБОДЕЙСТВУЙ!

Пример закончен. Можешь запустить его и прелюбодействовать с результатом. Скрины получившихся у меня палитр разбросаны по всей статье, и ты сразу можешь прочувствовать все прелести анимации. Хочу сразу предупредить, что системная палитра хорошо меняется в любых версиях окошек. А вот лампочки на клаве заморгают только в Win9x. В Windows 2000 лампочки не моргают, хотя состояние клавиш реально меняется.

Назад на стр. 038-058-1  Содержание  Вперед на стр. 038-058-3