
- •Меню, строка состояния и панель инструментов
- •8.1. Меню 8.1.2. Главное меню
- •8.1.3. Дизайнер меню
- •8.1.4. Пункты меню
- •8.1.5. Разделительные линии
- •8.1.6. Комбинации клавиш
- •8.1.7. Обработка команд меню
- •8.1.8. Пункты-переключатели
- •8.1.9. Взаимоисключающие переключатели
- •8.1.10. Недоступные пункты меню
- •8.1.11. Контекстное меню
- •8.1.12. Значки в пунктах меню
- •8.2. Полноценное приложение для просмотра графических файлов
- •8.2.1. Диалоговые окна открытия и сохранения файла
- •8.2.2. Отображение рисунков
Л8. Использование невизуальных компонентов
Таймер. Формирование главного меню. Создание и работа с контекстным меню. Конструктор меню. Динамическая настройка меню. Комбинации клавиш. Настройка системного меню.
Таймер - это компонент, имеющий только одно одноименное событие. Это событие таймер генерирует через определенные промежутки времени. С технической же точки зрения таймер просто посылает окну сообщение WM_TIMER. Этот компонент расположен на вкладке System палитры компонентов.
Перенесите его на форму. Основное свойство для таймера - это Interval. Оно определяет (в миллисекундах), как часто наш компонент будет генерировать событие Timer. Например, если мы установим его значение в 1000, то событие Timer будет генерироваться раз с секунду, а если установим в 500 - то 2 раза в секунду. Если же это свойство установить в 0, то наше событие вообще генерироваться не будет.
Для примера рассмотрим, как наша программа раз в секунду может издавать звуковой сигнал. Для этого установите Interval в 1000, затем в заготовке для события таймера (для ее получения перейдите на вкладку Events инспектора объектов и сделайте двойной щелчок в строке OnTimer).
Внесите следующий код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
MessageBeep(0); //Звуковой сигнал
end;
Запускайте программу. Раз в секунду будет раздаваться стандартный звуковой сигнал.
А вот как можно заставить таймер выполнить некоторое действие однократно:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
MessageBeep(0);
Timer1.Interval:=0; //Отключаем таймер
... //Некоторое действие
end;
Разумеется, в этом случае необходимо установить для свойства Interval таймера некоторое первоначальное значение.
Меню, строка состояния и панель инструментов
8.1. Меню 8.1.2. Главное меню
Шаг 1. Приступая к практической работе, создайте новое приложение. Как это сделать, вы уже знаете. Поскольку в качестве примера мы решили разработать приложение для просмотра графических файлов, давайте назовем форму PictureForm (значение свойства Name), и дадим ей заголовок Picture Viewer (значение свойства Caption).
Шаг 2. Теперь сохраните модуль формы и весь проект, выполнив команду меню File | Save All. Модуль назовите MainUnit.pas, а файл проекта — PictureViewer.dpr. Вот теперь можно приступать к изучению и меню и всего остального.
Отображение в форме главного меню (main menu) обеспечивает компонент MainMenu, расположенный в палитре компонентов на вкладке Standard (рисунок 8.1). Поместите этот компонент на форму и дайте ему имя MainMenu (значение свойства Name).
Рисунок
8.1. Компонент MainMenu
Компонент MainMenu имеет небогатый набор свойств, подробно мы на них останавливаться не будем, а обозначим лишь самые важные (таблица 8.1):
Свойство |
Описание |
AutoHotKeys |
Значение maAutomatic избавляет программиста от необходимости назначать пунктам меню "горячие" клавиши (с помощью специального символа & в тексте пунктов); компонент автоматически подбирает "горячие" клавиши. Значение maManual требует, чтобы "горячие" клавиши назначил программист (см. 8.1.3). |
AutoLineReduction |
Если равно значению maAutomatic, то при отображении меню идущие подряд пункты-разделители рисуются как один разделитель, а пункты-разделители, находящиеся в начале или конце меню вообще не показываются. Свойство AutoLineReduction применяется при программном добавлении и удалении пунктов меню, чтобы избежать нежелательных явлений вроде повторяющихся и повисших разделительных линий. Если свойство AutoLineReduction равно значению maManual, то все пункты меню рисуются как есть. |
AutoMerge |
Определяет, сливается ли главное меню вторичной формы с главным меню главной формы. Способ слияния определяется значением свойства GroupIndex каждого пункта меню верхнего уровня. |
Images |
Список значков, отображаемых рядом с пунктами меню. Свойство Images используется совместно со свойством ImageIndex компонентов MenuItem (см. 8.1.12). |
Items |
Массив пунктов меню. |
OwnerDraw |
Если равно значению True, то каждый пункт меню получает возможность участвовать в процессе своего отображения при помощи специальных событий OnMeasureItem и OnDrawItem. Событие OnMeasureItem происходит в пункте меню, когда рассчитываются размеры пункта. Событие OnDrawItem происходит в пункте меню, когда пункт рисуется на экране. Если свойство OwnerDraw равно значению False, то пункты меню имеют стандартный вид и события OnMeasureItem и OnDrawItem не происходят. |
OnChange |
Происходит при изменении структуры меню. |
Таблица 8.1. Важнейшие свойства и события компонента MainMenu
Значок компонента MainMenu, который вы видите на форме, отображается лишь на этапе разработки. Он нужен для того, чтобы вы могли быстро активизировать компонент и перейти к установке его свойств. Однако компонент MainMenu является невизуальным и на этапе выполнения приложения его значок не отображается. Пользователь видит результат работы компонента — строку меню.
Пока в меню нет пунктов, нет и самого меню. Добавление новых пунктов выполняется в специальном окне — дизайнере меню (Menu Designer).