Строка состояния (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. Программа для просмотра графических файлов теперь имеет строку состояния