Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
29
Добавлен:
30.04.2019
Размер:
1.77 Mб
Скачать

4.1 Графическая метка

Первый (но не последний) графический визуальный объект – это метка, т.е. поле, содержащее некоторый текст, предназначенный для отображения на форме. Конструкторы графических меток:

NewGraphLabel( Parent, Caption )

NewGraphWordWrapLabel( Parent, Caption )

Созданный в этом конструкторе объект – это все тот же PControl, как и прочие визуальные объекты. Вы по-прежнему можете менять его позицию, размеры, задавать выравнивание. Но неприменимыми оказываются свойства и методы, эксплуатирующие дескриптор окна. Например, для него не удастся использовать многие обработчики событий, вроде OnMessage. Гарантированно доступными остаются OnClick, OnMouseXXXX (а так же OnKeyXXXX и OnChar – для «фокусируемых» графических контролов, см. далее). Эти события специально симулируются в обработчике сообщений оконного родителя, чтобы базовое поведение графических контролов оставалось прежним.

4.2. Графическое полотно для рисования

В отличие от своего оконного аналога (paintbox), графический ящик с рисунками собственного дескриптора окна не имеет, и использует дескриптор родительского окна, как и все прочие графические визуальные элементы. В частности, графический «ящик художника» уже не может выполнять функцию обычной панели, и становиться родителем для других визуальных элементов. Собственно, других отличий, если рассматривать его основную функциональность, больше нет. Функциональность этого элемента вся сосредоточена в наличии события OnPaint, а оно работает практически так же, как и для оконного двойника.

4.3. Графическая кнопка

А вот такого аналога кнопки в VCL уже нет. В KOL графическая кнопка в точности повторяет внешний вид и функциональность обычной кнопки (и даже чуть беднее, если учесть, что кнопка оконная в KOL может вместо текста содержать пиктограмму). Это не аналог TBitbtn из VCL (который так же держит свой дескриптор окна), и не аналог TSpeedButton (так как может захватывать фокус ввода) а именно аналог TButton, но без дескриптора окна. В частности, это означает, что на графических кнопках можно уже делать «Минера», не опасаясь за последствия, связанные с плохой производительностью или даже крахом операционной системы и запущенных параллельно приложений в случае очень большого числа таких кнопок.

Как известно, основная функциональность кнопки заключается в ее способности быть «нажатой» манипулятором типа «мышь», и вызывать при этом сопоставленный этому событию обработчик OnClick, если таковой назначен. Кроме того, кнопка должна иметь способность оказываться в фокусе ввода (меняя при этом слегка свой внешний вид, обычно путем добавления пунктирной рамки внутри кнопки), и тогда такая визуальная кнопка может быть «нажата» с клавиатуры. Вероятно, в VCL потому и не был создан графический аналог кнопки, что возникает проблема с передачей фокуса объекту, который не может иметь фокуса по определению, просто потому, что у этого объекта нет дескриптора окна. В KOL эта проблема решена путем симуляции фокусировки: фокус на самом деле принадлежит родительскому оконному объекту, но этот объект «знает», что на самом деле в фокусе находится указанный ему графический объект, и передает события от клавиш ему.

Конструктор графической кнопки:

NewGraphButton( Parent, Caption )