Пълен контрол върху бутона за стартиране

Сайт на Delphi: ежедневни Delphi-новини, документация, статии, преглед, интервю, компютърен хумор.

В предишния пример измамих и хвърлих опора на екрана, а истинският бутон остана на мястото си непроменен. Сега ще ви покажа как можете да получите достъп, контрол и промяна на външния вид на самия бутон "Старт" (последният ще бъде наличен само на Windows 95/98/ME).

Бутонът за стартиране не е нищо повече от обикновен прозорец с картина, добре, изглежда така! За да получите достъп до него, трябва да знаете идентификатора на този прозорец. Как можете да го получите? Използване на API на Findwindow. Тази функция има два параметъра: първият е името на класа прозорец, а вторият е името на прозореца. Бутонът "Старт" има име на клас SnelljirayWnd , По-точно, това е класът на цялата лента на задачите. Не е необходимо да знаем името, защото ако не го посочите, тогава Findwindow ще ни насочи към първия намерен прозорец от посочения клас. Бързам да ви зарадвам, че в Windows има само един прозорец от този клас и това е лентата на задачите.

За достъп до изображението на бутон в лентата на задачите можете да използвате по-разширена функция - FindwindowEx. Тази функция ни позволява достъп до всеки елемент на прозореца. Вече има четири параметъра:

1. Прозорецът, в който да търсите контролата.

2. Контролът на този прозорец, от който да започнете търсенето. Ако зададете 0 тук, тогава търсенето ще започне от първата контрола.

3. Контролен клас. В нашия случай това е бутон, така че трябва да посочите Button.

4. Име. Ако зададете нула нула, тогава всички елементи от подобен клас ще бъдат търсени.

И така, за да поемете контрола върху бутона за стартиране, трябва да напишете следния код:

Тук в първия ред се намира прозорецътлента на задачите. Резултатът от търсенето се съхранява в променлива. Във втория ред намираме самия бутон "Старт" в намерената лента на задачите. Резултатът от това търсене ще бъде съхранен в променливата StartBtnBmp.

Сега стартираме Delphi и се приготвяме да се държим лошо. Създайте нов проект и манипулатор на събития за формуляра oncreate. В този манипулатор напишете тези два реда, които са посочени по-горе. Сега отидете малко по-високо и намерете частния раздел в описанието в кода. Добавете две променливи там.

Сега имаме идентификатора на прозореца на желания бутон и идентификатора на картината и сме готови да започнем да контролираме бутона Старт. Нека го направим!

Подгответе чертеж на бутон с размер около 51 x 21. Можете да видите моята заготовка на фиг. 2.4.

пълен

Ориз. 2.4. Нова снимка за старт бутона

Сега плъзнете един компонент на изображението от палитрата на допълнителния компонент към формуляра. Отидете в прозореца на инспектора на обекти и щракнете двукратно върху свойствата на картината вдясно. Трябва да видите прозорец за качване на изображение. Натиснете бутона 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 за бутоните Disable и Enable. В първия напишете следното:

процедура TForml.Button2Click(Подател: TObject); fcegin

Във втория манипулатор на събития (за бутона Разреши), въведете следното:

И в двата случая се използва една и съща функция EnableWindow. Тази функция прави прозореца достъпен и го деактивира в зависимост от параметрите, които са му предадени. Първият параметър е ID на прозореца. Във втория всъщност определяте дали да активирате прозореца (true) или да го деактивирате (false). Ако го изключите, тогава бутонът ще спре да реагира на натискане и колкото и да щракнете върху него, няма да има реакция. Можете дори да пробиете монитора с мишката, няма да видите никакво меню.

контрол

Ориз. 2.7. Резултат от промяна на картината

Сега нека научим как да скрием бутона и цялата лента на задачите. Създайте манипулатор на събитие onclick за бутона Скриване на изображението и напишете следното:

Тук отново се използва функцията B.вторият параметър е SWHIDE за скриване на прозореца. За да го покажете отново, трябва да укажете параметъра sw_show. Първият параметър е указател към изображението. Както можете да видите, с помощта на тази функция можете да скриете не само прозорци, но и компоненти. Само компонентите трябва да имат прозорец и трябва да могат да имат указател към себе си от тип

Сега нека скрием целия панел. За да направите това, създайте манипулатор на събитие Onclick за бутона Скриване на панела и напишете следното в него:

Тук използваме същата техника като за предишния бутон, само идентификаторът на целия панел е посочен като първи параметър на функцията showwindow.

На компактдиска в директорията \Examples\Chapter 2\Start Button2 можете да намерите пример за тази програма.

На компактдиска в \Examples\Chapter 2\ Start Button2 можете да видите цветни версии на картините в този раздел.