Компонент 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; | Если содержит True, разрешает щелкнуть по секции заголовка как по кнопке. В этом случае управление передается в обработчик события OnSectionClick Имя заголовка секции | property Imagelndex: TImageIndex; | Указывает индекс изображения из хранилища 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( HeaderControl: THeaderControl; Section: THeaderSection) of object; property OnSectionCli.ck: TSectionNotifyEvent; | Возникает при изменении размеров компонента возникает при щелчке мышью по секции Section | TSectionNotifyEvent = procedure( HeaderControl: THeaderControl; Section: THeaderSection) of object; property OnSectionResize: TSectionNotifyEvent; | Возникает при изменении размеров секции Section | TSectionTrackState = (tsTrackBegin, tsTrackMove, tsTrackEnd) ; TSectionTrackEvent = procedure( HeaderControl: THeaderControl; Section: THeaderSection; Width: Integer; State: TSectionTrackState) of objects; property OnSectionTrack: TSectionTrackEvent; | Возникает при изменении размеров секции и позволяет обработать три возможных состояния: tsTrackBegin - начало перемещения границы;tsTrackMove - идет перемещение границы; tsTrackEnd - конец перемещения границы |
8 8 8
| |