|

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
|