Родительские и дочерние компоненты

Наследники класса TControl образуют всю палитру видимых компонентов Delphi. В терминах Windows они называются элементами управления.

Некоторые из наследников TControl обладают дескрипторами окон, специальными идентификаторами, которые Windows присваивает всем объектам, обладающим свойствами окна. Такие элементы управления обладает свойствами окна, то он должен уметь принимать и обрабатывать сообщения Windows, то есть выполнять следующие операции:

· получать и передавать фокус управления во время выполнения приложения;

· воспринимать управляющие воздействия от мыши и клавиатуры;

· уметь размещать на себе другие элементы управления.

Такие компоненты называют оконными элементами управления. Эти компоненты являются наследниками класса TWinControl, непосредственно следующего за TControl.

В состав оконного компонента могут включаться другие компоненты, которые могут в общем случае и не являться оконными. Оконный компонент, содержащий другие компоненты, называется родительским, он транслирует управляющие сообщения дочерним компонентам. Обязательным требованием Windows является визуальная синхронизация дочерних компонентов с родительским: границы дочерних компонентов не могут выходить за пределы родителя, они появляются и исчезают на экране (не в оперативной памяти!) вместе с ним.

КлассTControl определяет для каждого видимого компонента свойство

Parent, которое содержит ссылку на его родительский компонент, property Parent: TWinControl read FParent write SetParent;

Таким образом, владелец(Owner) создает компонент (не обязательно видимый), а родитель(Parent) управляет видимым компонентом. Поскольку конструкторTComponent. Create не изменяет свойстваParent, то при создании видимых компонентов это свойство необходимо изменять программно. Например:

vax lbText : TLabel;

Procedure TForml.FormCreate(Sender: TObject); begin

lbText := TLabel.Create (Self); lbText.Parent :« Self; lbText.Caption :» 'Label'; end;

Если убрать операторlbText. Parent: =Self; метка не получит сообще­ние Windows о том, что надо прорисовать себя на экране и ее текст не появится. В классеTWinControl (для каждого оконного компонента) описаны:

свойствоControls, содержащее список дочерних компонентов.

property Controls[Index: Integer]: TControl road GetControl;свойствоControlCount возвращает количество дочерних элементов

property ControlCount: Integer read GetControlCount;а также методы для работы со спискомControls (табл. 4.16).

Таблица 4.16

function ContainsControl (Control: TControl): Возвращаетtrue, если компонентcontrolявляется дочерним элементом
function ControlAtPos(Const Роз: TPoint; AllowOisabled: Boolean; AllowWinControls: Boolean « False): TControl; Возвращает ссылку на компонент, которому принадлежит точка с координатамиPos. Если AllowDisable=true, поиск ведется и среди запрещенных для выбора компонентов
function FindNextControl (CurControl: TWinControl; GoForward, CheckTabStop, CbecJcParenfe: Boolean): TWinControl; Ищет новый элемент в спискеControls. CurControl определяет начальную позицию поиска; приGoForward=true поиск ведется от начальной позиции к концу списка, при CheckTabStop= true поиск ведется только среди компонентов со свойствомTabStopравнымtrue; приCheckParent=trueпоиск ведется только среди оконных элементов
procedure GetTabOrderList (List: TList); dynamic; Создает списокList всех дочерних элементов в порядке их обхода поTab
procedure NotifyControls (Msg: Word); Посылает сообщениеMsg во все дочерние оконные компоненты



C 1 по 3 папка 3


 
(DC: HDC; First: TControl); , < лочерний ™o™  
  feSSTrr--
override; п -1—--------- с- icjlbucoro KOMll<.Hf.[rrn  
, riUv.ouiira scaJ.eControls (M, D: Integer) ; procedure Selects'! . ---- размерами, измененнымив M/D™no ^авнершюспредыд^цими разменами
procedure SelectNnvt -----  
(CurControl: TWinControl• GoForward, CheckTabStop•' Boolean) обхода по Tab. Значение параметров по2
(Child: TComponent; Order- integer) ; override • компонента Child
(AControl: TControl)- 1 virtual; --

§4.5. Положение, размеры и оформление компонент

Размеры компонентов

Размеры компонентов определяются следующими четырьмя свойствами, описанными в классе TControl.

property Height: Integer read FHeight write SetHeight; property Left: Integer read FLeft write SetLeft; property Top: Integer read FTop write SetTop; property Width: Integer read FWidth write SetWidth;

Для всех компонентов, кроме форм, эти свойства задаются в координатах клиентской части родительского компонента (внутренней области за исключением заголовка, рамки и меню). Для форм они определяются в координатах экрана. Чтобы пересчитать относительные координаты в координаты экрана и наоборот можно использовать два методаTControl. function ClientToScreen(const Point: TPoint): TPoint; function ScreenToClient(const Point: TPoint): TPoint;

В классTControl введено свойствоConstraints, которое используется для ограничения размеров элементов управления по высоте и ширине: property Constraints: TSizeConstraints;

где объект классаTSizeConstraints имеет четыре свойства:MaxHeight, MaxWidth, MinHeight, MinWidth типа0. .Maxlnt

Видимость и доступность

С помощью свойстваVisible любой видимый компонент можно скрыть (false) или показать(true). Скрытый компонент не реагирует на события мыши и клавиатуры, ему нельзя передать фокус ввода поTab. property Visible: Boolean read FVisible write SetVioible

stored IsVisibleStored default True;Аналогичные действия выполняют методыHide иShow, описанные в классе TControl. procedure Hide; procedure Show;

Расположнть компонент перед всеми другими или наоборот после всех остальных можно методами, procedure BringToFront; procedure SendToBack;

СвойствоEnabled определяет возможность активизации компонента. Если это свойство равноTrue, компонент недоступен и отображается серым цветом, property Enabled: Boolean read GetEnabled write SetEnabled

stored IsEnabledStored default True; Положение компонентаСвойствоAlign определяет положение компонента относительно границ своего родителя:

property Align: TAlign read FAlign write SetAlign default alNone; TAlign = (alNone,alTop,alBottom,alLeft,alRight,alClient,alCustom);

Временное отключение и включение эффекта от свойстваAlignобеспечивается методами, описанными в классеTWinControl:

procedure DisablaAlign; procadure EnableAlign;

В классTControl введено свойство, определяющее способ фиксирования дочернего компонента относительно границ контейнера, в котором он размещен:

ТAnchors = set of TAnchorKind;

TAnchorKind = (akTop, akLeft, akRight, akBottom); property Anchors: TAnchors;

По умолчанию это свойство имеет значение[akTop, akLeft], что означает фиксацию компонента относительно левого верхнего угла контейнера.

Внешний вид компонентаВидимая часть элемента заливается цветом, определенным свойствомColor: property Color : TColor;

Обычно значение этого свойства выбирается из таблицы стандартных цветов Windows в виде константыclXXXX. Можно также выбрать нестандартный цвет.

С каждым управляющим компонентом связывается текстовая строка, которая становится доступна либо через свойствоCaption, либо через свойствоText.Независимо от того, какое свойство хранит эту строку, ее можно установить и получить соответственно методамиSetTextBuf иGetTextBuf . function GetTextBuf(Buffer: PChar; BufSize: Integer): Integer; procedure SetTextBuf(Buffer: PChar);

Метод GetTextLen возвращает длину строки: function GetTextLen: Integer;

Если эта строка прорисовывается в компоненте, используется шрифт, задаваемый свойством Font.

property Font: TFont read FFont write SetFont stored IsFontStored;

В этом случае свойство Alignment(TCustomLabel) регулирует расположение текста относительно границ компонента:

TAlignment = (taLeftJustify, taRightJustify, taCenter); property Alignment: TAlignment read FAlignment write SetAlignment

default taLeftJustify;СвойствоDesktopFont установленное вtrue заставит компонент выводить текст системным шрифтом Windows.

Некоторые компоненты всегда имеют плоское представление, например TLabel, другие - всегда объемное, например,TButton. Для остальных имеется возможность регулировать представление через свойствоCtl3d, описанноевклассеTWinControl.

Наши рекомендации