Створення візуальних компонентів

Все про програмування.

Головне меню

Створення візуальних компонентів

При першому знайомстві з Delphi безперечно дивуєшся безлічі різних візуальних компонентів. Кнопочки, панельки, написи та багато іншого. Але після кількох місяців користування цим середовищем розробки з'являється бажання написати щось своє. Саме це завдання ми і спробуємо вирішити використовуючи інвентар Delphi який є у нас у наявності і природно свою уяву.

Постановка задачі

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

Реалізація

Найбільш правильним, з погляду ієрархії VCL, методом вирішення першого пункту поставленої задачі, буде створення нового компонента, як базовий клас якого ми виберемоTCustomControl. Цей клас є базовим для створення компонентів-надбудов над візуальними об'єктами Windows, і надає методи для відтворення об'єктів різних форм. Якщо ж у вас немає необхідності успадковувати всі особливості поведінки об'єктів Windows то можете в якості базового класу використовуватиTGraphicControl, спадкоємці якого малюються швидше, оскільки не повинні стежити за безліч Віндовських службових повідомлень.

Сам компонентTCustomControl визначений у модулі controls.pas наступним чином:

Тут найцікавішим нам є методPaint і властивістьCanvas. За допомогою цих двох членів класуTCustomControl ми й малюватимемо нашу кнопку.

Крім цього ми трошки розширимофункціональність нашого компонента і надамо йому можливість встановлювати колір темної та світлої ділянки свого кордону, а також її товщину, і нарешті визначимо властивістьFlat яке відповідає за функціональність аналогічної властивості стандартних компонентів Delphi.

Виходячи з вищесказаного прототип нашого компонентаTEllipseButton буде виглядати так:

Як бачимо, тут крім базових конструктораCreate та методуAfterConstruction перевизначені і методиPaint таRepaint.

Вся функціональність цього компонента в основному укладена в динамічних методах DrawFlat, DrawNormal, DrawPushed які відповідають за малювання компонента відповідно в режимі Flat , в нормальному піднесеному режимі і в натиснутому режимі.

Власне малювання робиться за допомогою методу Canvas.Arc, який малює частину еліпса заданим кольором. Таким чином ми малюємо одну половину темним кольором, а іншу – світлим і отримуємо ефект опуклості. Помінявши місцями кольори, ми досягаємо ефекту «натискання» для нашої кнопки. Ну а використавши як колір фону – середній між темним і світлим кольорами кордону – ми отримуємо ефектFlat :

Тепер, оснастивши наш компонент необхідними функціями ми можемо розпочати його «зачісування», тобто. написання рутинних методів щодо присвоєння значень властивостям та налагодженню. Насамперед тут треба реалізувати реакцію компонента на події миші. Це ми робимо за допомогою методівWMLButtonDown, WMLButtonUp, WMMouseMove.

Тут також ми реалізуємо функціональність властивостіFlatWMMouseMove ).

Крім цього, ми використовуємо методиCMMouseEnter, CMMouseLeave для виклику відповідних обробників подій.

А також реалізовуємо методCMTextChanged для правильного відображення тексту кнопки:

Тепер справа тільки за методами Paint і Repaint, які ми реалізовуємо наступним чином:

Всі. Тепер наш компонент готовий до випробувань. І перед тим як його реєструвати та кидати на палітру компонентів настійно рекомендую Вам перевірити його функціональність у runtime режимі. А якщо ні, то ви ризикуєте повісити всю IDE Delphi при додаванні компонента на форму.

Перевірка компонента

Перевірка компонента в режимі runtime не викликає ускладнень навіть у новачка. Усього лише треба:

  • створити новий додаток
  • у розділіuses розмістити посилання на модуль з вашим компонентом ellipsebutton.pas
  • оголосити змінну типуTEllipseButton
  • створити компонент, заповнити всі його властивості та показати

Після такої наочної перевірки та налагодження ви можете спокійно реєструвати ваш компонент:

І використовувати вже у ваших програмах для швидкого створення еліпсоїдних кнопок.

Тепер, володіючи майстерністю малювання, і знаючи методику написання візуальних компонентів для Delphi ви можете спокійнісінько написати будь-який хитромудрий елемент інтерфейсу і навіть продавати його як окремий програмний продукт за немаленькі гроші.