Файл: Учебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.05.2024

Просмотров: 147

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Image и уменьшения размеров компонента до нуля, чтобы в отсутствие рисунка компонент не занимал места на форме:

procedure TPictureForm.CloseMenuItemClick(Sender: TObject);

begin

with Image do

begin

Picture := nil;

Width := 0;

Height := 0;

end;

NormalSizeMenuItem.Click;

EnableCommands(False);

end;

Шаг 40. Еще остались незавершенными обработчики команд меню Half Size, Normal Size и Double Size, которые тоже нужно доработать. С ними вы легко разберетесь:

procedure TPictureForm.HalfSizeMenuItemClick(Sender: TObject);

begin

HalfSizeMenuItem.Checked := True;

HalfSizePopupItem.Checked := True;

with Image do

begin

AutoSize := False;

Width := Picture.Width div 2;

Height := Picture.Height div 2;

Stretch := True;

end;

end;
procedure TPictureForm.NormalSizeMenuItemClick(Sender: TObject);

begin

NormalSizeMenuItem.Checked := True;

NormalSizePopupItem.Checked := True;

Image.AutoSize := True; // восстановить нормальные размеры компонента

end;
procedure TPictureForm.DoubleSizeMenuItemClick(Sender: TObject);

begin

DoubleSizeMenuItem.Checked := True;

DoubleSizePopupItem.Checked := True;

with Image do

begin

AutoSize := False;

Width := Picture.Width * 2;

Height := Picture.Height * 2;

Stretch := True;

end;

end;

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



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

Внимание! В каталоге 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

Задает так называемую команду, которая будет выполняться по щелчку на строке состояния. Весь список команд содержится в компоненте 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. Программа для просмотра графических файлов теперь имеет строку состояния

8.3.2. Подсказки в строке состояния

Как вы хорошо знаете, строка состояния — это еще стандартное место отображения подсказок к пунктам меню. Сейчас самое время заняться этим вопросом. Вспомните, как работает строка состояния вашего любимого текстового процессора. Когда вы активизируете меню, строка состояния, состоящая из нескольких панелей, превращается в простую длинную панель и на ней отображается подсказка текущего пункта меню. Когда вы завершаете работу с меню (например, выбираете команду), строка состояния восстанавливает свой первоначальный вид.

Для того чтобы вы могли получить строку состояния с описанной выше логикой работы, в компоненте StatusBar предусмотрен режим отображения простого текста. Его обеспечивает булевское свойство SimplePanel. По умолчанию оно равно значению False и в строке состояния отображаются панели объекта Panels. Если установить свойство SimplePanel в значение True, то в строке состояния будет отображаться текст, хранящийся в свойстве SimpleText. Итак, задача состоит в том, чтобы при активизации меню записывать подсказку выбранного пункта в свойстве SimpleText и, в том случае если подсказка содержит текст, устанавливать свойство SimplePanel в значение True. Для решения этой задачи вы должны представлять механизм работы подсказок. Его суть состоит в следующем.

Каждый пункт меню имеет свойство Hint для хранения подсказки. Когда вы выделяете пункт меню с помощью мыши или клавиатуры, текст подсказки переписывается из пункта меню в объект Application, у которого тоже есть свойство Hint. При этом в объекте Application возникает событие OnHint. Все, что нам нужно — написать обработчик этого события, который отобразит значение свойства Hint объекта Application в строке состояния.

Объект Application не виден в окне свойств, но вы можете получить доступ к его событиям на этапе проектирования. Для этого в форму помещается специальный компонент