Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория Win32 и Dialog.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
729.97 Кб
Скачать

Компонент Delphi HeaderControl

Компонент Delphi HeaderControl (Панель заголовков) располагается на странице Win32 Палитры Компонентов.  Он представляет из себя вертикальную или горизонтальную строку полосу (это зависит от свойства Align, по умолчанию  задается alTop - вверху), разделенную на части (секции), в которых могут записаны текстовые заголовки.  Порядок, количество и размеры этих частей можно менять.

Простые методы работы компонента HeaderControl дают возможность согласовывать размеры других компонентов под размеры секций заголовков. 

Свойство DragReorder равное TRUE позволяет в приложении менять мышью местами заголовки. Images - позволяет использовать рисунки компонента ImageList в заголовках. Style - делает секции заголовков объемными (hsButtons) или плоскими (hsFlat).

Рисунок 23 – Создание разделов в редакторе

Разделы создаются в редакторе при помощи свойства Sections. Для того чтобы войти в него необходимо сделать двойной щелчок на компоненте или на многоточии рядом со свойством  Sections. Текст заголовка храниться в свойстве Text. Для того чтобы секции могли работать как кнопки свойство AllowClick должно быть равно TRUE. ImageIndex - номер картинки из указанного компонента.

Рисунок 24 – Пример использования компонента HeaderControl

Расположим на форме компоненты как на рисунке выше. Создадим два раздела компонента HeaderControl - Левый и Правый. Ширину я задал 195, ее нужно установить и для раздела и для компонента GroupBox. Далее установим обработчик события OnSectionTrack:

procedure TForm1.HeaderControl1SectionTrack(

HeaderControl: THeaderControl;

Section: THeaderSection; Width: Integer;

State: TSectionTrackState);

begin

Section.Width := Width;

GroupBox1.Width := HeaderControl1.Sections.Items[0].Width;

GroupBox2.Width := HeaderControl1.Sections.Items[1].Width;

GroupBox2.Left := HeaderControl1.Sections.Items[1].Left;

end;

Запустим приложение и протестируем его. Левой кнопкой мыши мы можем изменять  ширину компонент, через изменение ширины разделов.

Полоса состояния StatusBar

Компонент StatusBar представляет собой ряд панелей, отображающих полосу состояния в стиле Windows. Обычно эта полоса размещается внизу формы.

Свойство SimplePanel определяет, включает ли полоса состояния одну или множество панелей. Если SimplePanel = true, то вся полоса состояния представляет собой единственную панель, текст которой задается свойством SimpleText. Если же SimplePanel = false, то полоса состояния является набором панелей, задаваемых свойством Panels. В этом случае свойство SizeGrip определяет, может ли пользователь изменять размеры панелей в процессе выполнения приложения.

Каждая панель полосы состояния является объектом типа TStatusPanels. Свойства панелей вы можете задавать специальным редактором наборов. Вызвать редактор можно тремя способами: из Инспектора Объектов кнопкой с многоточием около свойства Panels, двойным щелчком на компоненте StatusBar или из контекстного меню, выбрав команду Panels Editor. В окне редактора вы можете перемещаться по панелям, добавлять новые или уничтожать существующие. При перемещении по панелям в окне Инспектора Объектов вы будете видеть их свойства.

Основное свойство каждой панели — Text, в который заносится отображаемый в панели текст. Его можно занести в процессе проектирования, а затем можно изменять программно во время выполнения. Другое существенное свойство панели — Width (ширина).

Программный доступ к текстам отдельных панелей можно осуществлять двумя способами: через индексированное свойство Panels или через его индексированное подсвойство Items. Например, два следующих оператора дадут идентичный результат:

StatusBar1.Panels[0].Text := 'текст 1';

или

StatusBar1.Panels.Items[0].Text := 'текст 1';

Оба они напечатают текст «текст 1» в первой панели.

Количество панелей полосы состояния можно определить из подсвойства Count свойства Panels. Например, следующий оператор очищает тексты всех панелей:

for i := 0 to StatusBar1.Panels.Count - 1 do

StatusBar1.Panels[i].Text := '';

На рисунке 25 приведен пример текстового редактора на основе компонента RichEdit, содержащий полосу состояния. В ее первой панели отображается номер строки и символа, перед которым находится курсор, во второй — отображается, модифицирован текст в окне, или нет. В третьей панели отображается подсказка о назначении компонента, над которым в данный момент расположен курсор мыши.

Рисунок 25 - Пример редактора RichEdit с полосой состояния

Для реализации такой полосы состояния надо в обработчиках событий OnKeyDown, OnKeyUp, OnMouseDown и OnMouseUp компонента RichEdit1 и события OnResize формы обеспечить выполнение операторов:

StatusBar1.Panels[0].Text:=IntToStr(

RichEdit1.CaretPos.Y+1) + ':'+

IntToStr (RichEdit1.CaretPos.X+1);

if RichEdit1.Modified

then StatusBar1.Panels[1].Text := 'модиф.'

else StatusBar1.Panels[1].Text := '';

Эти операторы заполняют первые две панели полосы состояния. Занесение в строку состояния подсказок в целом выходит за рамки данной книги. Но, поскольку, говоря о полосе состояния, было бы неправильно обойти этот вопрос, ниже без особых пояснений описывается, как это можно сделать.

В Delphi 5 это делается очень просто с помощью компонента ApplicationEvents. Этот компонент помещается на форму и в обработчик его события OnHint заносится оператор, который для приведенного на рисунке 25 имеет вид:

StatusBar1.Panels[2].Text := Application.Hint;

Он отображает в панели свойство приложения Application.Hint, а в это свойство автоматически переносится вторая часть текста подсказки (свойство Hint — о нем подробнее сказано ниже) того компонента, над которым перемещается курсор мыши.

В предыдущих версиях Delphi это оформляется более громоздко. Аналогичный оператор надо занести в обработчик события OnHint переменной Application. Этот обработчик вам надо создать вручную. Пусть вы назвали его DisplayHint.

Прототип этой функции DisplayHint можно внести в описание класса формы. Кроме того надо указать приложению на эту функцию как на обработчик события OnHint. Это можно сделать, например, задав в обработчике события OnCreate формы оператор:

Application.OnHint := DisplayHint;

В итоге текст вашего модуля может иметь вид (приводится с сокращениями):

interface

type

TForm1 = class(TForm)

StatusBar1: TStatusBar;

procedure FormCreate(Sender: TObject);

procedure DisplayHint(Sender: TObject);

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.DisplayHint(Sender: TObject);

begin

StatusBar1.Panels[2].Text := Application.Hint;

end;

procedure TForm1.FormCreate (Sender: TObject);

begin

Application.OnHint := DisplayHint;

end;

Как видим, все это существенно более громоздко, чем указанные выше возможности, реализованные в Delphi 5.

Чтобы все это работало, надо в свойствах Hint тех компонентов, пояснения которых вы хотите отображать в панели состояния, написать соответствующие тексты. Если вы к тому же хотите, чтобы у компонента появлялся ярлычок с короткими подсказками при задержке пользователем мыши над этим компонентом, то текст в свойстве Hint должен состоять из двух частей, разделенных символом вертикальной черты «|». Например, в свойстве Hint быстрой кнопки, соответствующей разделу меню Сохранить можно ввести текст: «Сохранить|Сохранение документа в файле». Первая часть этого текста будет появляться в ярлычке кнопки, если ее свойство ShowHint (показать подсказку) установлено в true. А вторую часть описанные выше операторы будут отображать в строке состояния при перемещении курсора мыши над кнопкой, независимо от значения ее свойства ShowHint.