Повний контроль над кнопкою Пуск
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
У попередньому прикладі я знімався і підкидав на екрані бутафорію, а реальна кнопка залишалася на місці без змін. Зараз я покажу вам, як можна отримати доступ до самої кнопки Пуск, керувати і змінювати її вигляд (останнє буде доступно тільки в Windows 95/98/МЕ).
Стартова кнопка – це не що інше, як просте вікно з картинкою, ну виглядає воно таким чином! Щоб отримати доступ до неї, потрібно знати ідентифікатор цього вікна. Як її можна отримати? За допомогою функції API Findwindow. Ця функція має два параметри: перший - це ім'я класу вікна, а другий - це ім'я вікна. Кнопка Пуск має ім'я класу SnelljirayWnd. Точніше сказати, це клас усієї панелі завдань. Ім'я нам знати необов'язково, тому що якщо його не вказати, Findwindow вкаже нам на перше знайдене вікно зазначеного класу. Поспішаю вас порадувати, що в Windows є лише одне вікно такого класу, і це панель завдань.
Щоб отримати доступ до зображення кнопки на панелі завдань, можна скористатися більш просунутою функцією FindwindowEx. Ця функція дозволяє отримати доступ до будь-якого елемента на вікні. У неї вже є чотири параметри:
1. Вікно, у якому потрібно шукати елемент управління.
2. Елемент управління на цьому вікні, з якого потрібно починати пошук. Якщо тут вказати 0, то пошук буде починатися з першого елемента управління.
3. Клас елементу управління. У нашому випадку це кнопка, отже потрібно вказати Button.
4. Ім'я. Якщо вказати нуль nil, то відбуватиметься пошук усіх елементів такого класу.
Отже, щоб отримати контроль над кнопкою Пуск, потрібно написати наступний код:
Тут у першому рядку знаходиться вікнопанелі завдань. Результат пошуку зберігається в змінній У другому рядку знаходимо саму кнопку Пуск усередині знайденої панелі завдань. Результат цього пошуку буде Зберігатися У змінній StartBtnBmp.
Тепер запускаємо Delphi і готуємось шкодити. Створити новий проект і обробник події для форми oncreate. У цьому обробнику напишіть ті два рядки, які вказані вище. Тепер підніміться трохи вище і знайдіть у коді розділ private в описі. Додайте туди дві змінні.
Ось тепер у нас є ідентифікатор вікна потрібної кнопки та ідентифікатор картинки, і ми готові розпочати керування кнопкою Пуск. Давайте зробимо це!
Заготуйте малюнок кнопки розміром десь 51 х 21. Мою заготовку ви можете побачити на рис. 2.4.

Мал. 2.4. Нова картинка для кнопки Пуск
Тепер перенесіть на форму один компонент зображення з палітри компонентів Additional. Перейдіть у вікно Інспектора об'єктів і двічі клацніть праворуч Picture. Перед вами має з'явитися вікно для завантаження зображення. Натисніть кнопку Load, знайдіть заготовлену для кнопки картинку та відкрийте її.

Мал. 2.5. Завантаження картинки
І останнє: перенесіть на форму п'ять кнопок та назвіть їх так:
1. Змінити зображення.
4. Сховати картинку.
5. Сховати панель.
Всі. Приготування закінчено. На рис. 2.6 Ви можете бачити форму програми, яка вийшла у мене. Залишилося тільки змусити ці кнопки виконувати те, що написано.

Мал. 2.6. Форма майбутньої програми
Тепер ми застосуємо кілька прийомів самбо до кнопки Пуск. Почнемо із зміни малюнку кнопки. Для цього створіть обробник події Onclick для кнопки Змінити картинку та напишіть у ньому таке:
Тут використана WinAPI-функція SendMessage, яка надсилає системне повідомлення. Ця функція має чотири параметри:
1. Вікно, якому треба надіслати повідомлення, вказано ідентифікатор вікна-кнопки.
2. Тип повідомлення – зазначено BM_Setimage, що змусить вікно змінити картинку.
3. Третій параметр повідомлення - він дорівнює нулю.
4. Четвертий параметр повідомлення – покажчик на картинку, яку треба підставити.
Просто і зі смаком. Програма відправила це повідомлення системі – вікну кнопки Пуск. Це вікно, побачивши повідомлення про те, що треба змінити картинку, виконує вказівку беззаперечно. На рис. 2.7 Ви можете побачити результат роботи цієї маленької програми. Шкода, що цей прийом працює лише у Windows 9x
Описані далі прийоми працюють у будь-якому Windows - ми навчимося включати та відключати кнопку Пуск. Створіть обробники подій onclick для кнопок Вимкнути та Увімкнути. У першому напишіть таке:
procedure TForml.Button2Click(Sender: TObject); fcegin
У другому обробнику події (для кнопки Увімкнути) введіть наступне:
В обох випадках використана та сама функція EnableWindow. Ця функція робить вікно доступним і відключає його залежно від переданих параметрів. Перший параметр – ідентифікатор вікна. У другому ви власне і вказуєте - увімкнути вікно (true) або вимкнути (false). Якщо його відключити, то кнопка перестане реагувати на натискання, і скільки б ви не клацали по ній, ніякої реакції не буде. Можете хоч монітор мишкою проткнути, жодного меню ви не побачите.

Мал. 2.7. Результат зміни картинки
Тепер навчимося ховати кнопку та всю панель завдань. Створіть обробник події onclick для кнопки Сховати картинку та напишіть наступне:
Тут знову використано функцію Вяк другий параметр вказано SWHIDE, щоб сховати вікно. Щоб показати його знову, необхідно вказати параметр sw_show. Як перший параметр вказано покажчик на картинку. Як бачите, за допомогою цієї функції можна ховати не лише вікна, а й компоненти. Тільки компоненти повинні бути віконними і повинні мати можливість мати покажчик на себе.
Тепер сховаємо всю панель. Для цього створіть обробник події Onclick для кнопки Сховати панель та напишіть у ньому таке:
Тут використовується той самий прийом, що й для попередньої кнопки, тільки як перший параметр функції showwindow вказаний ідентифікатор усієї панелі.
На компакт-диску в директорії \Приклади\Глава 2\Кнопка Пуск2 можна знайти приклад цієї програми.
На компакт-диску в директорії \Приклади\Глава 2\ Кнопка Пуск2 ви можете побачити кольорові версії малюнків цього розділу.