Программирование в Delphi. Барков И.А - 44 стр.

UptoLike

Составители: 

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