Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба2.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.62 Mб
Скачать

События класса tControl

    В классе TControl, в отличие от предшествующих ему в иерархии, описаны не только свойства и методы, но и следующие события:

   

Таблица 3. События класса TControl

Событие

Описание

property OnClick: TNotifyEvent;

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

property OnDblClick: TNotifyEvent;

Событие при двойном щелчке на компоненте.

property OnDragDrop: TDragDropEvent; type TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer) of object;

Событие при отпускании перетаскиваемого компонента.

property OnDragOver: TDragOverEvent; type TDragOverEvent = procedure(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object;

Событие при перетаскивании объекта над компонентом.

property OnEndDrag: TEndDragEvent; type TEndDragEvent = procedure(Sender, Target: TObject; X, Y: Integer) of object;

Событие при окончании или прерывании перетаскивания.

property OnMouseDownTMouseEvent; type TMouseEvent = procedure(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object;

Событие при нажатии кнопки мыши над объектом.

property property OnMouseMove: TMouseMoveEvent; type TMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer) of object;

Событие при перемещении указателя мыши над объектом.

property OnMouseUp: TMouseEvent;

Событие при отпускании нажатой кнопки мыши над объектом.

property property OnStartDrag: TStartDragEvent; type TStartDragEvent = procedure(Sender: TObject; var DragObject: TDragObject) of object;

Событие при начале перетаскивания объекта.

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

    Напомним, что определить владельца компонента можно, воспользовавшись свойством Owner, а свойство Parentтипа TWinControl позволяет узнать его родителя.

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

function Perform (Msg, WParam: Word; LParam: LongInt): LongInt; .

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

property Caption: TCaption; TCaption = string[255];

либо

property Text: TCaption; .

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

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; .

    О курсорах мы говорили при изучении класса TScreen.

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

property ControlStyle: TControlStyle;

TControlStyle = Set of (csAcceptsControls, csCaptureMouse,

csDesignInteractive, csClickEvents, csFramed,

csSetCaption, csdpague, csDoubleClicks,

csFixedWidth, csFixedHeight); .

    Их описание приведено в следующей таблице:

Таблица 1. Описание флагов TControlStyle

Флаг

Описание

csAcceptsControls

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

csCaptureMouse

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

csDesignlnteractive

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

csFramed

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

csSetCaption

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

csOpaque

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

csClickEvents

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

csDoubleClicks

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

csFixedWidth csFixedHeight

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

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

property ControlState: TControlState;

TControlState = Set of (csLButtonDown, csClicked,

csPalette, csReadingState, csAlignmentNeeded,

csFocusing, csCreating); .

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

Таблица 2. Описание флагов TControlState

Флаг

Описание

csLButtonDown

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

csClicked

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

csPalette

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

csReadingState

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

csAlignmentNeeded

Элемент требует выравнивания относительно родительского компонента.

csFocusing

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

csCreating

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

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

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

property PopupMenu: TPopupMenu; .

О каждом визуальном компоненте должно быть известно, где он будет показан и какой будет иметь размер. Свойство:

property BoundsRect: TRect;

определяет прямоугольник, содержащий координаты верхнего левого и правого нижнего углов компонента в системе координат клиентской области родительского элемента. Для формы верхний левый угол выражен в системе координат экрана.

    Также можно установить положение и размер компонента, изменяя координаты верхнего левого угла, длины и ширины методом:

procedure setBounds (ALeft, ATop, AWidth, AHeight: Integer);.

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

property Left: Integer;

property Top: Integer;

property Width: Integer;

property Height: Integer; .

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

property ClientRect: TRect; .

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

property ClientHeight: Integer;

property ClientWidth: Integer; .

    Свойство ClientOrigin задает положение начала клиентской области относительно экрана:

property ClientOrigin: TPoint; .

    Если же нужно связать с координатной системой экрана произвольную точку, пользуйтесь парой методов (не путать с одноименными функциями Windows API):

function ClientToScreen (const Point: TPoint): TPoint;

function ScreenToClient (const Point: TPoint): TPoint; .

    Очень важную часть работы по управлению размерами и расположением элементов выполняет свойство:

property Align: TAlign; .

    Оно определяет выравнивание компонента относительно границ родителя. Может принимать одно из предопределенных значений:

TAlign = (alNone, alTop, alBottom, alLeft, alRight, alClient);:

  • alNone - выравнивание отсутствует;

  • alTop, alBottom, alLeft, alRight - выравнивание происходит по соответствующей стороне родителя;

  • alClient - компонент занимает все пространство клиентской области родителя.

    Выравнивание гарантирует, что при изменении размеров родителя относительная позиция дочернего элемента не меняется. Это свойство имеет приоритет над простым изменением положения и размеров. Если новые координаты элемента противоречат способу его выравнивания (например, перемещение вверх при alBottom), изменения отвергаются и элемент возвращается к первоначальным координатам. Свойство Align незаменимо при организации панелей инструментов и строк состояния: они могут перемещаться и видоизменяться вместе с содержащей их формой.

    Для временного отключения действия свойства Align предназначены методы:

procedure DisableAlign;

procedure EnableAlign; .

    Эти методы управляют возможностью выравнивания потомков данного элемента, они должны вызываться в паре. Для восстановления выравнивания элементов в соответствии с Align есть метод:

procedure Realign; .

    В следующем примере использование методов DisableAlign и EnableAlign позволяет настроить выравнивание панели (компонента TPanel) по тому краю формы, на который пользователь перетащит ее мышью.

    Внешний вид приложения показан на рисунке 1:

свойства, методы и события класса TWinControl.     Класс TWinControl является базовым абстрактным классом для всех оконных компонентов Delphi, то есть для тех компонентов, которые:

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

  • могут содержать другие компоненты, то есть быть компонентами-контейнерами, компонентами-родителями других, дочерних компонентов;

  • имеют дескрипторы окна.

    Новые компоненты редко создаются непосредственно на основе TWinControl. Обычно они основываются на производных классах, таких, как TCustomControl, имеющий канву и обработку сообщений прорисовки, или на более специализированных классах типа TButtonControl, TCustomComboBox, TCustomEdit или TCustomListBox.