18.3.14. THeaderControl - управляющий заголовок

Компонент THeaderControl представляет собой многоколончатый заголовок с регулируемыми размерами колонок (секций). Каждая колонка (секция) заголовка может содержать текст и/или графику. Компонент способен обрабатывать событие onResize, которое возникает при каждом изменении размеров любой секции. В ходе обработки этого события программа обычно соответствующим образом изменяет линейные размеры столбцов таблицы или подобной структуры, с которой связан компонент.

В программе, окно которой показано на рис. 18.30, компонент THeaderControl используется для управления положением и линейными размерами трех других компонентов. Для реализации программы выполните следующее:

- Положите на пустую форму компоненты THeaderControl, ТЕ-dit, TMemo и TButton. По умолчанию HeaderControll .Align =alTop - убедитесь в этом и установите свойство, если это не так. Положение и размеры других компонентов не имеют значения.
- Создайте такие обработчики событий OnCreate для формы Form1, а также OnResize и OnSectionResize для компонента HeaderControll:

Рис. 18.30. Пример использования компонента THeaderControl для управления положением и размерами других компонентов

const

Delta = 10;// Зазор между границами заголовка и компонентами

procedure TFormI.FormCreate(Sender: TObject);

var

HSection: THeaderSection;

k: Integer;

begin

// Создаем три секции заголовка:

with HeaderControll do

for k := 0 to 2 do

begin

HSection := Sections.Add;

HSection.Text := 'Секция №' + IntToStr(k);

HSection.Width := Forml.Width div 3;

HSection.MinWidth := 3 * Delta;

end;

end;

procedure Tform1.HeaderControllResize(Sender: TObject);

// Устанавливает положение и размеры компонентов

begin

with HeaderControll do

begin

Editl.Left := Delta;

Editl.Top := HeaderControll.Height + 1;

Editl.Width := Sections.Items[0].Width - 2 * Delta;

Memol.Left := Sections.Items[1].Left + Delta;

Memol.Top := HeaderControll.Height + 1;

Memol.Width := Sections.Items[1].Width - 2 * Delta;

Buttonl.Left := Sections.Items[2].Left + Delta;

Buttonl.Top := HeaderControll.Height + 1;

Buttonl.Width := Sections.Items[2].Width - 2 * Delta;

end

end;

procedure TFormI.HeaderControllSectionResize(

HeaderControl: THeaderControl; Section: THeaderSection);

begin

HeaderControllResize(Self)

end;

He забудьте определить в области видимости обработчиков FormCreate И HeaderControllResize глобальную константу Delta.

Для заголовка создается объект класса THeadersections, определяющий секции заголовка. Его свойство

property Items[Index: Integer]: THeaderSection;

открывает доступ к индексированным объектам-секциям класса THeaderSection. Свойства класса THeaderSection:

property Alignment: TAlignment; | Определяет выравнивание текста: taLeftJustify - прижат влево; taCenter - центрирован по горизонтали; taRight Justify - прижат вправо
property AllowClick:.Boolean; | Разрешает/запрещает генерацию события OnSectionClick при щелчке по секции
property Left: Integer; | Определяет положение левой границы секции относительно границ компонента (в пикселях)
property MaxWidth: Integer; | Определяет максимальную ширину секции в пикселях
property MinWidth: Integer; | Определяет минимальную ширину секции в пикселях
property Right: Integer; | Определяет положение правой границы секции относительно границ компонента (в пикселях)
THeaderSectionStyle = (hsText, hsOwnerDraw) ; property Style: THeaderSectionStyle; | Определяет способ формирования секции: hsText - секция содержит только текст и изображается автоматически; hsOwnerDraw - секция прорисовывается программой
Property Width: Integer; | Содержит текущую ширину секции в пикселях

Метод function THeaderSections.Add: THeaderSection;

добавляет очередную секцию заголовка. Некоторые свойства класса THeaderSection:

property AllowClick: Boolean-property DisplayName: String; property Imagelndex: TImageIndex; | Если содержит True, разрешает щелкнуть по секции заголовка как по кнопке. В этом случае управление передается в обработчик события OnSectionClick Имя заголовка секции Указывает индекс изображения из хранилища images, которое будет появляться следом за текстом заголовка
property MaxWidth: Integer; property MinWidth: Integer; type THeaderSectionStyle == (hsText, hsOwnerDraw) ; | Определяет максимальную и минимальную ширину секции Определяет тип секции: hsText - секция содержит только текст; hsOwnerDraw - секция нуждается в программной прорисовке
property Style: THeaderSectionStyle; property Text: String; | Содержит текст секции

Свойства Компонента THeaderControl:

property Canvas: TCanvas; | С помощью этого свойства можно изображать графику в секциях заголовка
property HotTrack: Boolean; | Разрешает/запрещает цвето выделение секции, над которой располагается указатель мыши
property Sections: THeaderSections; | Содержит секции заголовка

Для компонента определены следующие события:

TDrawSectionEvent = procedure( Header-Control: THeaderControl; Section: THeaderSection; const Rect: TRect; Pressed: Boolean) of object; property OnDrawSection: TDrawSectionEvent; | Возникает при необходимости прорисовать секцию, для которой установлен СТИЛЬ hsOwnerDraw: Section - объект-секция; Rect - прямоугольник прорисовки;Pressed -признак нажатой кнопки мыши

property OnResize: TNotifyEvent;

TSectionNotifyEvent = procedure( Head-

erControl: THeaderControl; Section:

THeaderSection) of object;

property OnSectionCli.ck: TSectionNoti

fyEvent;

Возникает при изменении размеров компонента возникает при щелчке мышью по секции Section

TSectionNotifyEvent = procedure( Head- erControl: THeaderControl; Section: THeaderSection) of object; property OnSectionResize: TSectionNo tifyEvent; | Возникает при изменении размеров секции Section

TSectionTrackState = (tsTrackBegin,

tsTrackMove, tsTrackEnd) ;

TSectionTrackEvent = procedure( Head-

erControl: THeaderControl; Section:

THeaderSection; Width: Integer; State:

TSectionTrackState) of objects-

property OnSectionTrack: TSection

TrackEvent;

Возникает при изменении размеров секции и позволяет обработать три возможных состояния:

tsTrackBegin - начало переме

щения границы;tsTrackMove -

идет перемещение границы;

tsTrackEnd - конец перемещения

границы