Справочник по компонентам Delphi. Часть 1
Страница 13. Элементы управления


 

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

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

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

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

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

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

property Parent: TWinControl;

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

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

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

(РЬ) property Caption: TCaption;
TCaption= string[255];
либо Text:
property Text: TCaption;

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

function GetTextBuf(Buffer: PChar; BufSize: Integer): Integer;
procedure SetTextBuftBuffer: PChar);
function GetTextLen: Integer;

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

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

property Cursor: TCursor;
TCursor = -32768..32767;
В Delphi предопределены стандартные типы курсоров. Их имена:

crDefault, crNone, crArrow, 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 TFormI. For-mCreate (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);

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

с sAccept sControls

Может содержать другие (дочерние) элементы управления. Таким свойством обладают не все элементы: обладающие им называются группирующими и рассмотрены в отдельном

разделе.
csCaptureMouse

Может получать сообщения от мыши.

csDesignInteractive

Транслирует нажатия правой кнопки мыши в нажатия левой во время разработки.

csFramed

Имеет обрамление (черным прямоугольником единичной толщины).

csSetCaption

Позволяет при изменении имени менять синхронно и свойство Text (если Text не был явно переустановлен).

csOpaque

Фон элемента непрозрачен. Это означает, что при пересечении нескольких компонентов на экране располо„.:мный под ним виден не будет.

csClickEvents

Воспринимает щелчки мышью.

с sDoubleC1i cks

Воспринимает двойные щелчки мышью. Если этот флаг отсутствует, двойные щелчки воспринимаются как простые.

csFixedWidth, csFixedHeight

Имеет фиксированную ширину или высоту соответственно. Она не изменяется при масштабировании компонента.

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

property ControlState: TControlState;

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

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

Над элементом в данный момент нажата левая кнопка мыши.

csClicked

Если элемент может воспринимать щелчки мышью, этот флаг устанавливается, пока кнопка мыши находится в нажатом состоянии.

csPalette

Элемент поддерживает собственную палитру и должен получать извещения о перерисовке в необходимых случаях.

csReadingState

Элемент в данный момент читается из потока.

сsAlignmentNeeded

Элемент требует выравнивания относительно родительского (см. раздел "Положение, размеры и выравнивание элементов управления").

csFocusing

В данный момент происходит получение элементом фокуса ввода.

csCreating

Элемент создается (этот флаг в настоящий момент не задействован).

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

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

property PopupMenu: TPopupMenu;

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

 
« Предыдущая статья   Следующая статья »