Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi.pdf
Скачиваний:
191
Добавлен:
24.02.2016
Размер:
6.84 Mб
Скачать

Внимание! В каталоге C:\Program Files\Common Files\Borland Shared\Images

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

Экспериментируя с приложением, обратите внимание на способность формы прокручивать рисунки, которые в ней не умещаются. Это явление называется автоматической прокруткой. Автоматическая прокрутка не требует никаких забот со стороны программиста и очень хорошо выручает в тех случаях, когда изображение превышает размеры рабочей области формы.

8.3. Строка состояния

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

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

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

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

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

Свойство

Action

Align

AutoHint

BorderWidth

Panels

Описание

Задает так называемую команду, которая будет выполняться по щелчку на строке состояния. Весь список команд содержится в компоненте ActionList (см. параграф 8.6).

Способ выравнивания строки состояния в пределах содержащего компонента (например, формы или панели).

Если равно значению True, то текст строки состояния автоматически устанавливается равным текущей всплывающей подсказке.

Величина отступа от границ компонента до границ информационных панелей. Информационные панели, отображаемые на строке состояния.

373

Если равно значению True, то вместо информационных панелей на строке SimplePanel состояния отображается одна простая строка текста, хранящаяся в свойстве

SimpleText.

SimpleText

SizeGrip

UseSystemFont

OnCreatePanelClass

OnDrawPanel

Строка текста, отображаемая в строке состояния, когда свойство SimplePanel равно значению True.

Если равно значению True, то в правом нижнем углу строки состояния рисуется "гармошка", работающая как размерная рамка.

Если равно значению True, то используется стандартный шрифт системы. Позволяет создавать свои собственные панели на базе класса TStatusPanel.

Происходит при рисовании панели, если свойство Style содержит значение psOwnerDraw.

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

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

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

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

374

Значение

Описание

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), продавленной

375

(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;

376

Учитывая, что массив 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;

377

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]