|
||||||||||||||||||||
|
100 компонентов общего назначения Delphi 57.6. Полоса состояния StatusBarКомпонент StatusBar представляет собой ряд панелей, отображающих полосу состояния в стиле Windows. Обычно эта полоса размещается внизу формы. Свойство SimplePanel определяет, включает ли полоса состояния одну или множество панелей. Если SimplePanel = true, то вся полоса состояния представляет собой единственную панель, текст которой задается свойством SimpleText. Если же SimplePanel = false, то полоса состояния является набором панелей, задаваемых свойством Panels. В этом случае свойство SizeGrip определяет, может ли пользователь изменять размеры панелей в процессе выполнения приложения. Каждая панель полосы состояния является объектом типа
TStatusPanels. Свойства панелей вы можете задавать специальным
редактором наборов. С этим инструментом вы уже имели дело в разделах
3.6.2 и 7.5 при редактировании
заголовков и полос. Вызвать редактор можно тремя способами: из Инспектора
Объектов кнопкой с многоточием около свойства Panels, двойным
щелчком на компоненте StatusBar или из контекстного меню, выбрав
команду Основное свойство каждой панели — 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 := '';
На рис. 7.8 приведен пример текстового редактора на основе
компонента 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 (см. подробнее в разделе 9.4) заносится оператор, который для приведенного на рис. 7.8 примера имеет вид: StatusBar1.Panels[2].Text := Application.Hint; Он отображает в панели свойство приложения Application.Hint, а в это свойство автоматически переносится вторая часть текста подсказки (свойство Hint — о нем подробнее сказано ниже) того компонента, над которым перемещается курсор мыши. В предыдущих версиях Delphi это оформляется более громоздко. Аналогичный оператор надо занести в обработчик события OnHint переменной Application (см. раздел 9.4). Этот обработчик вам надо создать вручную. Пусть вы назвали его 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 быстрой кнопки, соответствующей разделу меню
|
|
Web дизайн: Бурлаков Михаил
Web программирование: Бурлаков Михаил