Создание строки состояния

Строка состояния (status bar) - это панель в нижней части окна, предназначенная для вывода вспомогательной информации: параметров документа, с которым работает пользователь, подсказок к пунктам меню и др. В среде Delphi она организуется с помощью компонента StatusBar, расположенного в палитре компонентов на вкладке Win32 (рисунок 8.36).

Шаг 41. Поместите компонент на форму и дайте ему имя StatusBar.


Рисунок 8.36. Компонент StatusBar

Таблица 8.9 знакомит вас с основными свойствами компонента StatusBar. Когда вы изучите компонент, она пригодится вам в качестве справочника, а сейчас просто окиньте ее взглядом и двигайтесь дальше.

Свойство Описание
Action Задает так называемую команду, которая будет выполняться по щелчку на строке состояния. Весь список команд содержится в компоненте ActionList (см. параграф 8.6).
Align Способ выравнивания строки состояния в пределах содержащего компонента (например, формы или панели).
AutoHint Если равно значению True, то текст строки состояния автоматически устанавливается равным текущей всплывающей подсказке.
BorderWidth Величина отступа от границ компонента до границ информационных панелей.
Panels Информационные панели, отображаемые на строке состояния.
SimplePanel Если равно значению True, то вместо информационных панелей на строке состояния отображается одна простая строка текста, хранящаяся в свойстве SimpleText.
SimpleText Строка текста, отображаемая в строке состояния, когда свойство SimplePanel равно значению True.
SizeGrip Если равно значению True, то в правом нижнем углу строки состояния рисуется "гармошка", работающая как размерная рамка.
UseSystemFont Если равно значению True, то используется стандартный шрифт системы.
OnCreatePanelClass Позволяет создавать свои собственные панели на базе класса TStatusPanel.
OnDrawPanel Происходит при рисовании панели, если свойство Style содержит значение psOwnerDraw.

Таблица 8.9. Важнейшие свойства и события компонента StatusBar

Как только вы добавили на форму строку состояния, она тут же прижалась к нижнему краю формы и растянулась по всей ее ширине (см. рис. ниже). Какая сообразительная! А ну-ка изменим ширину формы. Ба! Строка состояния тоже корректирует свою ширину и всегда занимает всю нижнюю часть формы (рисунок 8.37).


Рисунок 8.37. Строка состояния автоматически прижимается к нижнему краю формы

Такое поведение обеспечивает свойство Align, которое в компоненте StatusBar изначально содержит значение alBottom. Свойство Align есть во многих визуальных компонентах. С его помощью вы можете заставить компонент подгонять свои размеры и положение при изменении размеров своего владельца (формы или компонента, на котором он находится). Возможные значения свойства Align описаны в таблице 8.10.

Значение Описание
alNone Позиция и размеры компонента остаются неизменными в пределах владельца.
alTop Компонент прижимается к верхнему краю владельца и растягивается по всей его ширине.
alBottom Компонент прижимается к нижнему краю владельца и растягивается по всей его ширине.
alLeft Компонент прижимается к левому краю владельца и растягивается по всей его высоте.
alRight Компонент прижимается к правому краю владельца и растягивается по всей его высоте.
alClient Компонент подгоняется под размеры владельца.

Таблица 8.10. Значения свойства Align

Принимая во внимание, что некоторые компоненты могут содержать другие компоненты, становится ясно, какую мощь таит в себе свойство Align, избавляя программистов от огромной работы по перерасчету координат компонентов при изменении размеров формы. Всегда помните об этой чудесной возможности и старайтесь использовать ее в полной мере.

Шаг 42. Вернемся к примеру и приспособим строку состояния для отображения размеров рисунка и имени файла, в котором рисунок хранится на диске. С этой целью разделим строку состояния на две информационные панели. Перейдите к окну свойств и в поле Panels щелкните кнопку с многоточием (либо в контекстном меню строки состояния выберите пункт Panels Editor…). Откроется специальное окно с заголовком Editing StatusBar.Panels для создания панелей в строке состояния (рисунок 8.38).


Рисунок 8.38. Окно для создания панелей в строке состояния

Шаг 43. В этом окне создаются, редактируются и удаляются панели строки состояния. Оно работает в паре с окном свойств, в котором настраиваются свойства отдельно взятой панели строки состояния. Нажатием кнопки Add New создайте первую панель и установите ее свойства так, чтобы она получилась шириной 70 пикселей (Width = 70), продавленной (Bevel = pbLowered) и с центрированным текстом (Alignment = taCenter). См. рисунок 8.39.


Рисунок 8.39. В строке состояния создана панель

В этой панели будут отображаться размеры рисунка. Аналогично создайте вторую панель (рисунок 8.40) неограниченной ширины (Width = -1), продавленной (Bevel = pbLowered) и с прижатым влево текстом (Alignment = taLeftJustify). В ней будет отображаться имя файла.


Рисунок 8.40. В строке состояния создана еще одна панель

После этого закройте окно Editing StatusBar.Panels.

Строка состояния создана и сейчас рассмотрим, как вывести в ней текст. Доступ к панелям обеспечивает свойство Panels. Оно содержит массив Items, элементами которого являются объекты-панели. Каждая панель имеет свойство Text, в котором хранится отображаемый на панели текст. Итак, установка содержимого строки состояния в нашем примере будет выглядеть так:

StatusBar.Panels.Items[0].Text:= Format('%d x %d', [Image.Picture.Width, Image.Picture.Height]); StatusBar.Panels.Items[1].Text:= OpenDialog.FileName;

Учитывая, что массив Items выступает главным свойством объекта Panels, эти операторы можно записать короче:

StatusBar.Panels[0].Text:= Format('%d x %d', [Image.Picture.Width, Image.Picture.Height]); StatusBar.Panels[1].Text:= OpenDialog.FileName;

Для вывода информации на первую панель (с индексом 0) мы воспользовались функцией Format, форматирующей строку. Первый параметр функции - это строка-шаблон, а второй - открытый массив с аргументами, подставляемыми вместо управляющих символов строки-шаблона.

Шаг 44. Обновление строки состояния удобно оформить в виде метода формы:

procedure TPictureForm.UpdateStatusBar; begin if Image.Width <> 0 then begin StatusBar.Panels[0].Text:= Format('%d x %d', [Image.Picture.Width, Image.Picture.Height]); StatusBar.Panels[1].Text:= OpenDialog.FileName; end else // в компоненте Image нет рисунка begin StatusBar.Panels[0].Text:= ''; StatusBar.Panels[1].Text:= ''; end; end;

Шаг 45. Вызовы метода UpdateStatusBar поместите в обработчики команд меню Open... и Close.

procedure TPictureForm.OpenMenuItemClick(Sender: TObject); begin if OpenDialog.Execute then begin Image.Picture.LoadFromFile(OpenDialog.FileName); EnableCommands(True); NormalSizeMenuItem.Click; end; UpdateStatusBar; end;   procedure TPictureForm.CloseMenuItemClick(Sender: TObject); begin with Image do begin Picture:= nil; Width:= 0; Height:= 0; end; NormalSizeMenuItem.Click; EnableCommands(False); UpdateStatusBar; end;

Наконец выполните компиляцию приложения и проверьте, что строка состояния работает. Например, откройте файл Chemical.bmp, расположенный по маршруту C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color. В строке состояния отобразятся размеры рисунка и путь к файлу.


Рисунок 8.41. Программа для просмотра графических файлов теперь имеет строку состояния


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  




Подборка статей по вашей теме: