UNDER CONTROL

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


Системная палитра под контролем продвинутых перцев

Horrific aka Фленов Михаил (smirnandr@mail.ru) www.cydsoft.com/vr-online

С каждым выпуском рубрики "кодинг" мои примеры усложняются и становятся все извращеннее. Только я остаюсь неизменным, каждый раз показывая, как можно приколоться над ближним. Меня некоторые спрашивают, почему я не учу чему-нибудь толковому? Хорошо, что спрашивают только некоторые, большинству все нравится. Отвечаю: толковому учат везде, а я рассказываю то, о чем большинство старается умалчивать. Как говорит библия: "Обмани ближнего своего, ибо ближний обманет тебя и возрадуется (Супер новый завет Dr.Klouniz Mix)" :).

НУ, К ЧЕРТУ!!!

Сегодня я покажу тебе, как можно поиздеваться над системной палитрой и осуществить анимацию лампочек на клавиатуре. Так что не богохульствуй, а запусти Delphi во имя отца, сына и святого Винни-Пуха.

Для издевательств нам понадобятся две кнопки и два таймера. На первой кнопке (Button1) напиши "Анимация палитры". На второй кнопке (button2) напишем "Анимация кнопок".

Можешь расположить свое хозяйство (в смысле кнопки и таймеры), как твоей душе угодно. Мою форму можешь увидеть на рисунке 1.

Главное - у обоих таймеров установи свойство Enabled в false, чтобы по умолчанию они были отключены. По нажатию кнопок мы будем их включать.

Теперь, сын мой :), для первого таймера установи свойство Interval в 5000. По этому таймеру будет меняться палитра, которая происходит достаточно долго (1-3 секунды, в зависимости от количества открытых прог). По второму таймеру будем анимировать лампочки на клаве, поэтому тут свойство Interval установим в 100.

СИСТЕМНАЯ ПАЛИТРА

Начнем мы с системной палитры. Для изменения какого-нибудь системного цвета есть функция SetSysColors. У нее всего три параметра:

1. Сколько цветов мы хотим изменить.

2. Номера цветов в системной палитре для изменения.

3. Новые значения цветов.

Допустим, что ты хочешь поменять пятый цвет на красный. В этом случае нужно написать вот такой код:

SetSysColors(1, 5, clRed);

Но это слишком сложно, поэтому мы упростим пример. По нажатию первой кнопки "Анимация палитры" запустим первый таймер:

procedure TForm1.Button1Click(Sender: TObject);

begin

Timer1.Enabled:=true;

end;

Теперь создадим обработчик события, когда срабатывает таймер (для этого просто дважды щелкни по нему). Здесь мы напишем листинг 1. В этом листинге как раз и находится код смены палитры.

БОГ В ПОМОЩЬ!!!

Если бог не помог тебе разобраться с листингом 1, то это придется сделать мне. После объявления имени процедуры и перед ее началом (там, где мы всегда объявляем переменные) я объявил несколько констант. Константы - те же самые переменные, только их значения нельзя изменять, в каком виде объявил, так и останется. Обе константы объявлены как массивы. Массив - это просто набор каких-то данных, следующий друг за другом. Массив в Delphi обозначается как array. Чтобы объявить переменную или константу типа массива нужно описать ее следующим образом:

r: array [длина массива] of тип данных;

Как определяется длина массива? Очень просто, это даже похоже на геометрическое определение. Например, тебе нужен массив из 12 значений. Длина такого массива может быть [0..11] или [1..12]. В квадратных скобках ты должен поставить начальное значение массива и конечное, а между ними две точки.

Содержание  Вперед на стр. 038-058-2