Страница 13 из 39 Элементы управления Потомком TComponent является класс TControl — элемент управления Windows. Все то, что видит (или может увидеть) пользователь в клиентской области вашей формы во время выполнения, порождено от класса 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; Подробно о его создании и использовании рассказано в разделе, посвященном меню. |