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

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

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

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

Добавлен: 04.05.2024

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

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

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



Рисунок 8.42. Компонент ApplicationEvents

Шаг 46. Поместите на форму компонент ApplicationEvents. Дайте ему имя ApplicationEvents. Обратите внимание, что у этого компонента всего два свойства: Name и Tag. Это не удивительно, так как основное назначение компонента — представить события объекта Application (таблица 8.11).

Событие

Описание

OnActionExecute

Происходит при выполнении любой команды в компоненте ActionList (см. параграф 8.6).

OnActionUpdate

Происходит во время простоя программы для обновления состояния команд в компоненте ActionList (см. параграф 8.6).

OnActivate

Происходит, когда приложение получает активность, т.е. когда пользователь переключается на него с другого приложения.

OnDeactivate

Происходит, когда приложение теряет активность, т.е. когда пользователь переключается с него на другое приложения.

OnException

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

OnHelp

Происходит, когда пользователь вызывает справку.

OnHint

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

OnIdle

Периодически происходит во время простоя программы.

OnMessage

Происходит при получении программой сообщения операционной системы Windows.

OnMinimize

Происходит, когда пользователь сворачивает приложение.

OnRestore

Происходит, когда пользователь восстанавливает свернутое приложение.

OnSettingChange

Происходит при изменении настроек операционной системы, например, настроек экрана или региональных настроек.

OnShortCut

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

OnShowHint

Происходит непосредственно перед появлением любой всплывающей подсказки.


Таблица 8.11. События компонента ApplicationEvents

Шаг 47. В окне свойств переключитесь на вкладку Events, найдите событие OnHint и создайте следующий обработчик:

procedure TPictureForm.ApplicationEventsHint(Sender: TObject);

begin

with StatusBar do

begin

SimpleText := Application.Hint;

SimplePanel := SimpleText <> '';

end;

end;

Шаг 48. Теперь в свойстве Hint каждого пункта меню впишите угодную вам строку-подсказку (рисунок 8.43).



Рисунок 8.43. Подсказка для пункта меню

Шаг 49. Выполните компиляцию и запустите программу. Проверьте работу механизма подсказок в строке состояния (рисунок 8.44).



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

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

8.4. Прокрутка

8.4.1. Прокрутка рабочей области формы

На практике часто бывает, что отображаемая информация не умещается на форме целиком (даже если форма раскрыта на весь экран). Например, в нашем примере можно загрузить рисунок, размеры которого превосходят размеры формы (и даже всего экрана) в несколько раз. Лучшее, что можно предпринять в таком случае, — это организовать прокрутку (scrolling) рисунка внутри формы.

В области прокрутки видна только часть всей картины. Доступ к скрытым частям происходит с помощью полос прокрутки. Щелчок мыши на стрелке полосы прокрутки сдвигает изображение на одну "информативную строку", а щелчок мыши на самой линейке прокрутки (но не на бегунке) сдвигает изображение на одну "информативную страницу" (понятия строки и страницы существуют для прокрутки и по вертикали, и по горизонтали). Перемещая бегунок, можно быстро прокрутить изображение на любое число информативных строк или страниц.

Форма имеет встроенную поддержку прокрутки, благодаря чему реализуется просмотр содержимого формы при любом изменении ее размеров. Когда размеры или координаты компонентов превышают размеры формы, форма создает полосы прокрутки и пользователь получает возможность прокручивать изображение. Встроенные в форму полосы прокрутки представлены составными свойствами
HorzScrollBar (горизонтальная полоса прокрутки) и VertScrollBar (вертикальная полоса прокрутки). Они кратко описаны в таблице 8.12.

Свойство

Описание

ButtonSize

Размер кнопок со стрелками.

Increment

Величина “информативной строки” в пикселах.

Margin

Минимальный отступ прокручиваемых элементов от края области прокрутки.

Position

Позиция бегунка на полосе прокрутки.

Range

Виртуальный размер области прокрутки.

Size

Ширина полосы прокрутки.

Smooth

Значение True указывает, что значение свойства Increment должно автоматически рассчитываться компонентом.

Style

Стиль полосы прокрутки: ssRegular — обычный рельефный, ssFlat — плоский, ssHotTrack — плоский с подсветкой при наведении указателя мыши.

ThumbSize

Размер бегунка.

Tracking

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

Visible

Определяет, видна ли полоса прокрутки пользователю.

Таблица 8.12. Составные свойства HorzScrollBar и VertScrollBar

Наибольший интерес представляют вложенные свойства Tracking и Increment. Установка булевского свойства Tracking в значение True обеспечивает прокрутку изображения по мере передвижения бегунка с помощью мыши. Свойство Increment задает величину "информативной строки" в пикселях. Уменьшив это значение до 1, вы получите более плавную прокрутку.

8.4.2. Отдельная область прокрутки

Как ни крути, а форма не позволяет организовать прокрутку в отдельной своей части. Например, в приложении для просмотра графических файлов хотелось бы организовать прокрутку рисунка, но так, чтобы строка состояния в прокрутке не участвовала. Форма этого сделать не позволяет. Здесь на помощь приходит компонент ScrollBox, представляющий собой отдельную область прокрутки. Он расположен в палитре компонентов на вкладке Additional (рисунок 8.45).




Рисунок 8.45. Компонент ScrollBox

Таблица 8.13 содержит краткую характеристику его отличительных свойств.

Свойство

Описание

Align

Способ выравнивания области прокрутки в пределах владельца.

AutoScroll

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

AutoSize

Режим автоматического изменения размеров области прокрутки в зависимости от размеров и положения внутренних компонентов.

BevelEdges

Вложенные свойства beLeft, beTop, beRight и beBottom определяют видимость соответственно левой, верхней, правой и нижней сторон рельефной рамки.

BevelInner

Внутренний скос рельефной рамки: bvNone — скос отсутствует, bvLowered — скос внутрь, bvRaised — скос наружу; bvSpace — скос заменяется отступом.

BevelKind

Вид рельефной рамки: bkNone — рамки нет, bkTile — рамка с четкими скосами, bkSoft — рамка со сглаженными скосами, bkFlat — плоская рамка (без скосов).

BevelOuter

Внешний скос рельефной рамки: bvNone — скос отсутствует, bvLowered — скос внутрь, bvRaised — скос наружу; bvSpace — скос заменяется отступом.

BevelWidth

Ширина скосов рельефной рамки.

BorderStyle

Определяет, имеет ли область прокрутки рамку.

DockSite

Определяет, используется ли область прокрутки для стыковки других компонентов.

HorzScrollBar

Определяет параметры и поведение горизонтальной полосы прокрутки (см. табл. 6.10).

VertScrollBar

Определяет параметры и поведение вертикальной полосы прокрутки (см. табл. 6.10).

OnGetSiteInfo

Происходит, когда у компонента запрашивается место для стыковки.

Таблица 8.13. Важнейшие свойства компонента ScrollBox

Компонент ScrollBox служит контейнером для других компонентов и обеспечивает их прокрутку внутри себя. Давайте поместим на него рисунок (компонент Image), а область прокрутки расположим между меню и строкой состояния. В результате большие рисунки будут прокручиваться уже не формой, а компонентом
ScrollBox и строка состояния останется на своем месте, прижатой к нижнему краю формы.

Шаг 50. Выделите на форме компонент Image и временно удалите его в буфер (команда меню Edit | Cut). Теперь опустите на форму компонент ScrollBox, выбрав его из палитры компонентов. Назовите новый компонент ScrollBox и подгоните его под всю незанятую область формы, установив свойство Align в значение alClient (рисунок 8.46).



Рисунок 8.46. Свойство Align обеспечивает подгонку компонента под размеры контейнера

Шаг 51. А сейчас переключитесь на форму (так, чтобы компонент ScrollBox остался выделенным) и вставьте из буфера обмена компонент Image (команда меню Edit | Paste). Убедитесь, что он находится в левом верхнем углу области прокрутки.

Готово. Выполните компиляцию и запустите приложение, загрузите в него какой-нибудь рисунок из каталога C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color. Увеличивая и уменьшая окно, понаблюдайте за тем, как появляются и исчезают полосы прокрутки между меню и строкой состояния (рисунок 8.47). Обратите внимание, что величина бегунков на полосах прокрутки зависит от соотношения видимой части и всего изображения. Это работает компонент ScrollBox. Правда, здорово! А самое главное — быстро и без единой строчки кода.



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

8.4.3. Полосы прокрутки

Коль уж речь зашла о прокрутке, сделаем небольшое отступление и скажем пару слов о компоненте ScrollBar. Вы, наверное, еще раньше заметили его в палитре компонентов на вкладке Standard и сейчас не совсем понимаете, для чего он нужен (рисунок 8.48).



Рисунок 8.48. Компонент ScrollBar