Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Общие принципы устройства и работы компонентов >> Элементы управления
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Элементы управления


Потомком TComponent является класс TControl ? элемент управления Windows. Все то, что видит (или может увидеть) пользователь в клиентской области вашей формы во время выполнения, порождено от класса TControl (клиентская область ? вся рабочая поверхность окна Windows, исключая заголовок, полосу меню и обрамление). Таким образом, потомки TControl являются визуальными компонентами. Далее будем называть их, как принято в Windows, элементами управления, или, где это уместно, просто элементами.

Отметим также подвох, связанный с названием "Библиотека визуальных компонентов" (Visual Component Library, VCL). Называя так свою библиотеку, разработчики из фирмы Borland были абсолютно правы, так как речь идет в первую очередь о новой ? визуальной ? технологии программирования. Но нужно помнить, что в VCL входит множество полноправных невизуальных компонентов. Например, меню ? оно, конечно, видимо на экране, но не в клиентской области; поэтому формально меню не является визуальным компонентом.

Большинство из свойств, которые вы будете видеть и изменять в визуальных компонентах, помещенных в Инспектор объектов, впервые описаны в классе TControl. Этот класс уже обладает "поведением" ? в нем предусматривается реакция на основные события.

Объект класса TControl не является окном Windows и в силу этого не может получить фокус ввода. Однако у него обязательно имеется родительский элемент , обладающий этим свойством и отвечающий за показ дочернего элемента и обработку некоторых поступающих ему сообщений. (Раз TControl не является окном, то он не имеет контекста устройства для рисования. Этот контекст обеспечивает ему родитель. Тип родительского элемента ? TWinControl ? будет рассмотрен ниже).

Обратите внимание на терминологию: Owner ? это владелец компонента, а Parent ? его родитель, определяемый свойством

property Parent: TWinControl;

Элемент управления может обрабатывать сообщения Windows. Чтобы послать собственной функции обработки элемента сообщение Windows вида Msg с параметрами WParam и LParam, можно воспользоваться методом:

function Perform(Msg, WParam: Word; LParam: Longint):Longiilt;

С каждым элементом управления связан некий текст, который может играть роль заголовка или редактироваться. В зависимости от роли текст может содержаться в свойствах Caption:

(Pb) property Caption: TCaption;

TCaption = string[255];

либо Text:

property Text: TCaption;

Не задумываясь о том, в каком именно свойстве содержится текст, получить доступ к нему можно посредством методов:

function GetTextBuf(Buffer: PChar; BufSize: Integer):Integer;

procedure SetTextBuf(Buffer: PChar);

function GetTextLen: Integer;

Все три метода работают, посылая в собственную функцию-обработчик сообщений объекта (через вызов метода Perform) сообщения Windows вида WM_GETTEXT, WM_SETTEXT и WM.GETTEXTLENGTH.

Курсор, который будет устанавливаться на компоненте, определен свойством:

property Cursor: TCursor;

TCursor = -32768..32767;

В Delphi предопределены стандартные типы курсоров. Их имена:

crDefault crArrow crNone crCross crIBeam crSize
crSizeNESW crSizeNS crSizeNWSE crSizeWE crUpArrow crHourGlass
crDrag crNoDrop crHSplit crVSplit crMultiDrag crSQLWait

Этим именам соответствуют константы со значениями от 0 до -17; под этими идентификаторами все курсоры доступны в свойстве Cursors глобального объекта Screen. Можно добавить к ним собственные курсоры, загрузив их из ресурсов и присвоив положительные идентификаторы:

{$R cursors.RES}
const
═════Curl = 1;
═════Cur2 = 2;
?
procedure Tform1.FormCreate(Sender: TObject);
begin
═════Screen.Cursors[Curl] := LoadCursor(hinstance, 'CUR_1');
═════Screen.Cursors[Cur2] := LoadCursor(hinstance, 'CUR_2') ;
end ;

Познакомиться с имеющимися видами курсоров можно, скомпилировав прилагаемый на дискете пример CURSORS.

У каждого элемента есть два свойства, отражающие его стиль и состояние. Они могут сослужить программисту хорошую службу.

Первый из них ? набор флагов, управляющих поведением компонента:

property ControlStyle: TControlStyle;

TControlStyle = set of (csAcceptsControls, csCaptureMouse, csDesignInteractive, csClickEvents, csFramed, csSetCaption, csOpaque, csDoubleClicks, csFixedWidth, csFixedHeight);

Эти флаги означают, что данный компонент имеет следующие особенности:

CsAcceptsControls Может содержать другие (дочерние) элементы управления. Таким свойством обладают не все элементы: обладающие им называются группирующими и рассмотрены в отдельном разделе.
CsCaptureMouse Может получать сообщения от мыши.
CsDesignInteractive Транслирует нажатия правой кнопки мыши в нажатия левой во время разработки.
CsFramed Имеет обрамление (черным прямоугольником единичной толщины).
CsSetCaption Позволяет при изменении имени менять синхронно и свойство Text (если Text не был явно переустановлен).
CsOpaque Фон элемента непрозрачен. Это означает, что при пересечении нескольких компонентов на экране расположенный под ним виден не будет.
CsClickEvents Воспринимает щелчки мышью.
CsDoubleClicks Воспринимает двойные щелчки мышью. Если этот флаг отсутствует, двойные щелчки воспринимаются как простые.
CsFixedWidth, csFixedHeight Имеет фиксированную ширину или высоту соответственно. Она не изменяется при масштабировании компонента.

 

Набор флагов, отражающих состояние элемента, описывается свойством:

property ControlState: TControlState;

TControlState = set of (csLButtonDown, csClicked, csPalette, csReadingState, csAlignmentNeeded, csFocusing, csCreating);

Они означают следующее:

CsLButtonDown Над элементом в данный момент нажата левая кнопка мыши.
CsClicked Если элемент может воспринимать щелчки мышью, этот флаг устанавливается, пока кнопка мыши находится в нажатом состоянии.
CsPalette Элемент поддерживает собственную палитру и должен получать извещения о перерисовке в необходимых случаях.
СsReadingState Элемент в данный момент читается из потока.
CsAlignmentNeeded Элемент требует выравнивания относительно родительского (см. раздел "Положение, размеры и выравнивание элементов управления").
CsFocusing В данный момент происходит получение элементом фокуса ввода.
CsCreating Элемент создается (этот флаг в настоящий момент не задействован).

Свойства ControlStyle и ControlState описаны не в пользовательской документации, а в документации разработчика новых компонентов. Вы можете читать их значения для получения информации об элементе управления, но изменять их стоит только тогда, когда вы полностью отдаете себе отчет в том, к чему это приведет.

Подавляющее большинство элементов управления имеет собственное всплывающее меню, появление которого связано с нажатием правой кнопки мыши. Доступ к нему возможен через свойство:

property PopupMenu: TPopupMenu;

Подробно о его создании и использовании рассказано в разделе, посвященном меню.



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017