Составители:
Рубрика:
44
граммиста. Определяется это свойством:
(№) property Style: TOutlineType;
TOutlineType = (otStandard, otOwnerDraw) ;
Стиль osStandard подразумевает, что дта каждого узла будет изображено то, что предусмотрено
стилем OutlineStyle. Для реализации стиля otOwnerDraw нужно нарисовать содержимое узла в обра-
ботчике события:
(Pb) property OnDrawItern: TDrawItemEvent;
TDrawItemEvent = procedure(ListBox: TListBox; Index: Integer;
Rect: TRect; State: TOwnerDrawState) of object;
Параметры:
Index — индекс узла;
Rect — отведенный ему прямоугольник;
State — множество, в которое могут входить состояния odSelected, odFocused.
Высота каждого узла постоянна и в этом случае
определяется свойством:
(Pb) property ItemHeight: Integer;
Для рисования у компонента есть своя канва:
property Canvas: TCanvas ;
Установить ее можно только для объекта стиля osOwnerDraw; при osStandard канва игнориру-
ется.
Обрамление компонента задается свойством:
(Pb) property BorderStyle: TBorderStyle;
Разобраться с применением этого компонента поможет пример OBJTREE. В нем по заранее за-
данному массиву компонентов ClassesSet выстраивается иерархическое дерево, в которое добавляются
и все объекты-предки. Для
примера были выбраны только 32 компонента, при желании можно вклю-
чить и все остальные. Не забывайте при этом добавить содержащие их модули к тем, что содержатся в
операторе uses. Когда вы перемещаете фокус по дереву, отображается имя объекта и имя модуля, в ко-
тором он описан. Для этого используется информация, возвращаемая недокументированным (пока
?)
методом класса TObject.ClassInfo. Возвращаемая им структура описана в исходных текстах VCL.
3.5. Группирование компонентов
По умолчанию родителем для большинства компонентов, размещенных на форме, является она
сама. В ряде случаев, однако, есть необходимость отказаться от этого правила, как визуально, так и
функционально подчеркнув обособленность каких-то элементов управления. Для этого вы можете ис-
пользовать специальные группирующие компоненты TGroupBox и TPanel. Мы также отнесли в эту
группу компонент TScrollBox, он
также обычно имеет дочерние компоненты, которые все вместе под-
вергаются прокрутке. Общим признаком для всех группирующих компонентов является наличие опции
csAcceptsControls в свойстве ControlStyle.
Компонент TGroupBox
TObject—^TPersistent—”TCorr]ponent—”TControl—>TWinControl—>
—>TCustomControl—>TCustomGroupBox—^TGroupBox
Модуль STDCTRLS
Страница Палитры компонентов Standard
Единственное назначение этого компонента — служить предком (Parent) для других компонен-
тов. Это играет роль тогда, когда они должны быть объединены в группу по какому-либо признаку.
Типичный пример — радиокнопки. Когда одна из них нажимается, все остальные радиокнопки в груп-
пе (т. е. с одним значением свойства Parent) автоматически
отпускаются.
Поэтому, для того чтобы на форме иметь несколько независимых групп радиокнопок, их нужно
поместить на разные объекты типа TGroupBox. (Кстати, именно для решения задачи с радиокнопками
граммиста. Определяется это свойством: (№) property Style: TOutlineType; TOutlineType = (otStandard, otOwnerDraw) ; Стиль osStandard подразумевает, что дта каждого узла будет изображено то, что предусмотрено стилем OutlineStyle. Для реализации стиля otOwnerDraw нужно нарисовать содержимое узла в обра- ботчике события: (Pb) property OnDrawItern: TDrawItemEvent; TDrawItemEvent = procedure(ListBox: TListBox; Index: Integer; Rect: TRect; State: TOwnerDrawState) of object; Параметры: Index — индекс узла; Rect — отведенный ему прямоугольник; State — множество, в которое могут входить состояния odSelected, odFocused. Высота каждого узла постоянна и в этом случае определяется свойством: (Pb) property ItemHeight: Integer; Для рисования у компонента есть своя канва: property Canvas: TCanvas ; Установить ее можно только для объекта стиля osOwnerDraw; при osStandard канва игнориру- ется. Обрамление компонента задается свойством: (Pb) property BorderStyle: TBorderStyle; Разобраться с применением этого компонента поможет пример OBJTREE. В нем по заранее за- данному массиву компонентов ClassesSet выстраивается иерархическое дерево, в которое добавляются и все объекты-предки. Для примера были выбраны только 32 компонента, при желании можно вклю- чить и все остальные. Не забывайте при этом добавить содержащие их модули к тем, что содержатся в операторе uses. Когда вы перемещаете фокус по дереву, отображается имя объекта и имя модуля, в ко- тором он описан. Для этого используется информация, возвращаемая недокументированным (пока?) методом класса TObject.ClassInfo. Возвращаемая им структура описана в исходных текстах VCL. 3.5. Группирование компонентов По умолчанию родителем для большинства компонентов, размещенных на форме, является она сама. В ряде случаев, однако, есть необходимость отказаться от этого правила, как визуально, так и функционально подчеркнув обособленность каких-то элементов управления. Для этого вы можете ис- пользовать специальные группирующие компоненты TGroupBox и TPanel. Мы также отнесли в эту группу компонент TScrollBox, он также обычно имеет дочерние компоненты, которые все вместе под- вергаются прокрутке. Общим признаком для всех группирующих компонентов является наличие опции csAcceptsControls в свойстве ControlStyle. Компонент TGroupBox TObject—^TPersistent—”TCorr]ponent—”TControl—>TWinControl—> —>TCustomControl—>TCustomGroupBox—^TGroupBox Модуль STDCTRLS Страница Палитры компонентов Standard Единственное назначение этого компонента — служить предком (Parent) для других компонен- тов. Это играет роль тогда, когда они должны быть объединены в группу по какому-либо признаку. Типичный пример — радиокнопки. Когда одна из них нажимается, все остальные радиокнопки в груп- пе (т. е. с одним значением свойства Parent) автоматически отпускаются. Поэтому, для того чтобы на форме иметь несколько независимых групп радиокнопок, их нужно поместить на разные объекты типа TGroupBox. (Кстати, именно для решения задачи с радиокнопками 44