Непрямокутні напівпрозорі форми, Різне, Програмування, статті






Проводячи курси з основ роботи з продуктам Borland (“Основи розробки додатків за допомогою Delphi”, “Основи розробки додатків за допомогою C + + Builder”), досить часто слухачі просять розповісти про різних “украшательний” можливості при програмуванні: нестандартні (непрямокутні) зображення вікон програми, “круглі” кнопки і т.п. Програма курсів досить насичена. Для того щоб полегшити починаючим програмістам процес створення власних, оригінальних форм додатків, був зроблений переклад цієї статті. Слід сказати, що зазначена технологія не є єдиною, і відображає далеко не всі доступні програмісту можливості. Необхідно врахувати і той факт, що “оригінальність” хороша при ретельно продуманому і ергономічному загальному дизайні, із збереженням стандартних дій користувача. Втім, це питання з трохи іншої області. А, до речі, питання створення власних VCL-компонентів, типу “круглих” кнопок (як і багато інших питань) у нас так само розглядаються, в одному з курсів по Borland.

А.А. Бородовіцин, технічний фахівець компанії “Інтерфейс”


Сьогодні часто зустрічаються на практиці нестандартні інтерфейси Їх можна побачити в дії в таких програмах як WinAmp або Windows Media Player. Однак тепер це легко може зробити будь-який програміст, надавши особливу родзинку своєму додатком.


Техніка, що описується в цій статті, доступна тільки для ПЗ, що працює під управлінням ОС Windows 2000/XP, так як в основі її лежить використання інтерфейсу API, введеного в ОС Windows 2000. Тому, додаток повинен при запуску перевіряти версію діючої ОС і коректно завершувати роботу, якщо версія ОС не відповідає заданим зразком.


Створення непрямокутних форм, тобто форм нерівних обрисів з елементами різного ступеня напівпрозорості, здійснюється за допомогою нової функціональної можливості під назвою багатошарові вікна (layered windows).


Перевірка на відповідність ОС Windows 2000/XP


До події OnCreate основної форми додатку потрібно додати наступні рядки:



У цьому програмному коді Win32 API не використовується. Замість цього застосовуються глобальні змінні, які під час виконання програми визначаються бібліотекою VCL. Вони визначені в модулі SysUtils і їх значення обчислюються під час запуску програми. Для отримання більш докладної інформації про версії даної ОС із сімейства Windows можна використовувати наступний набір змінних:



















Win32Platform

визначає платформу операційної системи

Win32MajorVersion визначає номер старшої версії операційної системи
Win32MinorVersion визначає номер молодшої версії операційної системи
Win32BuildNumber визначає номер підверсії операційної системи
Win32CSDVersion визначає номер останнього службового пакета Service Pack,
встановленого в системі


Створення багатошарового вікна


Для того щоб створити багатошарове вікно, необхідно додати в задану форму розширений стиль вікна: WS_EX_LAYERED. Це можна зробити, підмінивши у формі метод CreateParams:



В залежності від трансляції Win32 API, встановленої на комп’ютері, константа WS_EX_LAYERED може бути вже визначена.


Додавання прозорості та напівпрозорості


Win32 API реалізує прозорість і напівпрозорість за допомогою функції SetLayeredWindowAttributes:



Параметри цієї функції визначені в цій таблиці.
















hWnd Дескриптор багатошарового вікна, що задається властивістю Handle об’єкта TForm.
crKey Код прозорості кольору, використовуваний при створенні багатошарового вікна. Всі пікселі даної форми, що використовують цей колір, будуть прозорими.
bAlpha Значення параметра використовується для визначення прозорості багатошарового вікна. Якщо його значення дорівнює 0, то вікно – прозоре, при значенні 255 вікно – непроникно.
dwFlags Параметр вказує на дію, яку потрібно виконати. Можливі значення: LWA_COLORKEY – використовує crKey для визначення прозорості кольору; LWA_ALPHA – використовує bAlpha для визначення прозорості багатошарового вікна.


Таким чином, для створення напівпрозорої (на 50%) форми з прозорими пікселями кольору clBlue необхідно до події OnCreate додати наступний код:




Додавання прозорості до заданої формі також означає, що всі області із зазначеним кольором не будуть реагувати на клацання мишею. Ці клацання будуть застосовуватися до решти об’єктів, що перебувають в даному місці екрану.


Переміщення форми без заголовка вікна


При створенні програми з нестандартним інтерфейсом можна позбутися від класичного обриси вікна, а також від його заголовка. Для цього необхідно задати стиль BorderStyle даної форми як bsNone. Однак може знадобитися зберегти рухливість форми подібно стандартним додаткам. Цього можна добитися невеликий модифікацією порядку роботи повідомлення WM_NCHITTEST, що посилається операційної системою. Після такої модифікації будь клацання користувача в клієнтської області форми будуть сприйняті ОС Windows як клацання мишею на заголовку вікна, що і дозволить переміщати форму.




Висновок


У даній статті була представлена ​​інформація про інтерфейс API, доступному в ОС Windows 2000/XP. З його допомогою будь-якого додатка можна надати оригінальний, більш привабливий для сучасних користувачів вид.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*