Полный контроль над кнопкой "Пуск"

Xakep, номер #037, стр. 037-069-2


Теперь запускаем Delphi и готовимся шкодить. Создай новый проект и обработчик события для формы OnCreate. В этом обработчике напиши те две строчки, которые я указал выше. Теперь подымись немного выше и найди раздел private в описании. Добавь туда две переменные:

private

{ Private declarations }

StartBtnWnd, StartBtnBmp: hWnd;

Вот теперь у нас есть идентификатор окна нужной пимпы и идентификатор картинки, и мы готовы приступить к управлению кнопкой "Пуск". Давай сделаем это.

Последние приготовления

Заготовь сразу рисунок кнопки размером где-то 50х20. Мою заготовку ты можешь увидеть где-то рядом с этим текстом. Точно сказать, где именно, я не могу, потому что это зависит от наших непредсказуемых дизайнеров и верстальщиков. Лично я их за это и люблю. Дизайнерская непредсказуемость только украшает Х.

Теперь брось на форму один компонент TImage с палитры компонентов Additional. Перейди в объектный инспектор и дважды кликни по свойству Picture. Перед тобой должно появиться окно загрузки картинки. Мы уже проделывали такую операцию, поэтому здесь тебе все уже должно быть знакомо. Загрузи заготовленную для кнопки картинку.

И последнее - брось на форму пять кнопок и назови их так:

1. Изменить картинку.

2. Отключить.

3. Включить.

4. Спрятать картинку.

5. Спрятать панель.

Все!!! Приготовления закончены. Осталось только заставить эти кнопки выполнять то, что на них написано.

Несколько приемов самбо

Сейчас мы проведем несколько приемчиков самбо на пимпе "Пуск". Начнем с изменения рисунка кнопки. Для этого создай обработчик события OnClick для кнопки "Изменить картинку" и напиши в нем следующее:

procedure TForm1.Button1Click(Sender: TObject);

begin

SendMessage(StartBtnBmp, BM_SetImage, 0,

Image1.Picture.Bitmap.Handle);

end;

Здесь я использую WinAPI функцию SendMessage, которая посылает системное сообщение. У этой функции есть четыре параметра:

1. Окно, которому надо послать сообщение. Я указываю идентификатор окна-кнопки.

2. Тип сообщения. Я указываю BM_SetImage, что заставит окно изменить картинку.

3. Первый параметр сообщения, у меня он равен нулю.

4. Второй параметр сообщения, у меня это указатель на картинку, которую надо подставить.

Просто и со вкусом. Моя программа отправила это сообщение системе. Она передала его окну кнопки "Пуск". Это окно увидев сообщение о том, что надо изменить картинку беспрекословно выполняет мой приказ.

Вкл, выкл. Вкл, выкл, вкл...

Теперь научимся включать и отключать кнопку. Создай обработчики событий OnClick для кнопок "Выключить" и "Включить". В первом напиши следующее:

procedure TForm1.Button2Click(Sender: TObject);

begin

EnableWindow(StartBtnWnd, false);

end;

Во втором обработчике события (это для кнопки "Включить") напишем следующее:

procedure TForm1.Button3Click(Sender: TObject);

begin

EnableWindow(StartBtnWnd, true);

end;

В обоих случаях я использую одну и ту же функцию EnableWindow. Эта функция делает окно доступным и отключает его в зависимости от переданных ей параметров. Первый параметр - идентификатор окна. Во втором ты указываешь - включить окно (true) или отключить (false). Если его отключить, то кнопка перестанет реагировать на нажатия, и сколько бы ты ни кликал по ней, реакции никакой не будет. Можешь хоть монитор проткнуть, никакого меню ты не увидишь.

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