Учебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1
Скачать 2.61 Mb.
|
Enabled = False GroupIndex = 1 RadioItem = True Кроме этого пометьте пункт NormalSize, установив в нем свойство Checked в значение True. Таким образом, команды всплывающего меню дублируют некоторые команды главного меню, обеспечивая пользователю дополнительные удобства (рисунок 8.17). Рисунок 8.17. Команды контекстного меню Проектирование меню завершено и сейчас перейдем к программированию обработчиков событий. В данном примере команды контекстного меню обрабатываются так же, как и команды одноименных пунктов главного меню. Поскольку для пунктов главного меню обработчики уже написаны, то их просто нужно связать с пунктами контекстного меню. Это делается очень просто. Шаг 19. Активизируйте в дизайнере меню пункт HalfSize и выберите в окне свойств вкладку Events. Выберите обработчик HalfSizeMenuItemClick из раскрывающегося списка события OnClick. То же самое проделайте с пунктами NormalSize и DoubleSize, установив для них обработчики NormalSizeMenuItemClick и DoubleSizeMenuItemClick соответственно (рисунок 8.18). Рисунок 8.18. Установка обработчиков команд контекстного меню Шаг 20. Для синхронной работы главного и контекстного меню нужно еще подправить некоторые обработчики: procedure TPictureForm.HalfSizeMenuItemClick(Sender: TObject); begin // Показать рисунок половинного размера HalfSizeMenuItem.Checked := True; HalfSizePopupItem.Checked := True; end; procedure TPictureForm.NormalSizeMenuItemClick(Sender: TObject); begin // Показать рисунок нормального размера NormalSizeMenuItem.Checked := True; NormalSizePopupItem.Checked := True; end; procedure TPictureForm.DoubleSizeMenuItemClick(Sender: TObject); begin // Показать рисунок двойного размера DoubleSizeMenuItem.Checked := True; DoubleSizePopupItem.Checked := True; end; procedure TPictureForm.EnableCommands(Enable: Boolean); begin SaveAsMenuItem.Enabled := Enable; CloseMenuItem.Enabled := Enable; HalfSizeMenuItem.Enabled := Enable; HalfSizePopupItem.Enabled := Enable; NormalSizeMenuItem.Enabled := Enable; NormalSizePopupItem.Enabled := Enable; DoubleSizeMenuItem.Enabled := Enable; DoubleSizePopupItem.Enabled := Enable; end; Шаг 21. Контекстное меню готово, осталось сделать так, чтобы оно вызывалось по щелчку правой кнопки мыши на форме. Нет ничего проще — активизируйте форму и запишите в значении свойства PopupMenu имя разработанного ранее контекстного меню — PopupMenu. Вы можете ввести это значение с клавиатуры или выбрать из раскрывающегося списка (рисунок 8.19). Рисунок 8.19. Привязка контекстного меню к форме Готово, выполните компиляцию и запустите программу. Нажатие правой кнопки мыши в окне приложения вызовет появление контекстного меню. Все его пункты окажутся недоступными. Чтобы пункты контекстного меню заработали, выполните команду главного меню File|Open. После этого проверьте, что контекстное меню работает синхронно с главным меню. 8.1.12. Значки в пунктах меню Каждый пункт меню помимо текста может содержать красочный значок, наглядно поясняющий назначение пункта. Самый простой способ создания значка в пункте меню — установить свойство Bitmap. Шаг 22. Вызовите дизайнер меню для компонента MainMenu формы PictureForm. Выберите пункт File|Open и перейдите к свойству Bitmap в окне свойств (рисунок 8.20). Рисунок 8.20. Свойство Bitmap пункта меню Шаг 23. Установка значения свойства Bitmap осуществляется с помощью уже знакомого вам окна Picture Editor (рисунок 8.21), вызываемого нажатием кнопки с многоточием в поле свойства. В этом окне нажмите кнопку Load... и выберите файл Open.bmp из коллекции рисунков на компакт-диске (каталог \Images). Рисунок 8.21. Окно Picture Editor Наконец, закройте диалоговое окно с помощью кнопки OK. Результат показан на рисунке 8.22. Рисунок 8.22. Пункт Open имеет значок Такой способ создания значков в меню очень прост, но не всегда удобен. В тех случаях, когда количество пунктов меню исчисляется десятками и многие пункты главного меню дублируются в контекстных меню и панели кнопок, использовать для каждого пункта отдельную копию одного и того же значка не эффективно, да и неудобно. В таких случаях на помощь приходит компонент ImageList. Его основные свойства приведены в таблице 8.5. Как вы уже могли догадаться из названия компонента ImageList, он предназначен для хранения заранее подготовленного списка значков (в общем случае, любых рисунков). Другие компоненты берут значки из этого списка по номеру. Поскольку для хранения номера требуется гораздо меньше памяти, чем для хранения самого значка, то при использовании одного и того же значка в нескольких компонентах, достигается значительная экономия памяти. Да и управлять значками с помощью компонента ImageList тоже очень удобно. Если изменить значок в списке, то он автоматически изменится во всех компонентах, которые его используют. Существует лишь одно ограничение при использовании компонента ImageList — все хранимые значки должны иметь одинаковые размеры.
Таблица 8.5. Основные свойства и события компонента ImageList Воспользуемся компонентом ImageList для хранения значков в нашей программе. Найдите его в палитре компонентов на вкладке Win32 (рисунок 8.23). Рисунок 8.23. Компонент ImageList Поместите компонент ImageList на форму и дайте ему имя ImageList. Обратите внимание, что стандартные значения свойств Width и Height равны 16, поэтому не забудьте их изменить, если ваши значки имеют другие размеры. Шаг 24. Редактирование списка рисунков осуществляется в специальном окне. Вызовите его с помощью команды ImageList Editor…, находящейся в контекстном меню компонента ImageList (рисунок 8.24). Рисунок 8.24. Вызов окна для редактирования списка значков Шаг 25. В открывшемся окне (рисунок 8.25) нажмите кнопку Add... и выберите несколько файлов из коллекции рисунков на компакт-диске (каталог \Images). Рисунок 8.25. Окно, в котором редактируется список значков В этом окне параметры Transparent Color, Fill Color и Options нуждаются в пояснении. Параметр Transparent Color — это цвет пикселей, которые становятся прозрачными. Параметры Options и Fill Color используются, если размеры рисунка не совпадают с размерами, указанными в свойствах Width и Height компонента ImageList. Параметр Options принимает следующие значения: Crop — заполнить лишние пиксели цветом Fill Color (либо отсечь правую нижнюю часть рисунка, если рисунок превышает размеры); Stretch — растянуть/сжать рисунок до принятых размеров; Center — центрировать рисунок, заполнив оставшуюся область цветом Fill Color. Закройте диалоговое окно с помощью кнопки OK. Шаг 26. Список значков мы подготовили. Теперь нужно указать нашему компоненту MainMenu, откуда брать значки для своих пунктов. Выделите компонент MainMenu на форме и перейдите к свойству Images в окне свойств. Из списка значений свойства Images выберите элемент ImageList. Шаг 27. Теперь осталось указать пунктам меню номера соответствующих им значков. Для этого вызовите дизайнер меню для компонента MainMenu. Как это сделать, вы уже знаете. Далее выберите пункт Open... (программный идентификатор OpenMenuItem), перейдите к свойству ImageIndex и выберите из раскрывающегося списка подходящий значок (рисунок 8.26). Рисунок 8.26. Установка значка для пункта меню Аналогично установите номера соответствующих значков для пунктов Save As…, Half Size, Normal Size и Double Size. Не пугайтесь внешнего вида значков в недоступных пунктах меню. Они, как и текст, отображаются блеклыми. На рисунке 8.27 показана форма после добавления значков. Рисунок 8.27. В меню добавлены значки Шаг 28. Теперь установим значки для пунктов контекстного меню нашей формы. Активизируйте форму PictureForm и выберите на ней компонент PopupMenu. Затем в окне свойств перейдите к свойству Images и из списка значений этого свойства выберите элемент ImageList. После этого вызовите дизайнер меню у компонента PopupMenu, и аналогично тому, как вы это делали в главном меню, назначьте номера подходящих значков для пунктов Half Size, NormalSize и Double Size контекстного меню. Внимание! Значок, заданный с помощью свойства Bitmap, используется только в случае, когда свойство ImageIndex содержит отрицательное число. Поэтому если вы обнаружите, что установка значка с помощью свойства Bitmap не приносит желаемого результата, не паникуйте, а просто проверьте свойство ImageIndex. Шаг 29. Кстати, мы совсем забыли про значок, все еще хранящийся в свойстве Bitmap компонента OpenMenuItem. Сейчас в нем нет необходимости, поскольку реально используется значок, заданный с помощью свойства ImageIndex. Чтобы не держать в программе ненужные данные, удалите значок из свойства Bitmap. Для этого вызовите дизайнер меню для компонента MainMenu и выберите пункт Open.... Далее в окне свойств перейдите к свойству Bitmap и нажмите клавишу Del, после чего нажмите клавишу Enter. Теперь мы вплотную приблизились к полноценному приложению для просмотра графических файлов. 8.2. Полноценное приложение для просмотра графических файлов Сейчас вы достаточно много знаете о меню, и вас наверняка одолевает желание сделать из вышеприведенной заготовки полноценное приложение для просмотра графических файлов. Для этого необходимо решить две задачи: организовать выбор файла по командам меню Open... и Save As... ; реализовать загрузку и отображение рисунка. Первая задача решается с помощью стандартных диалоговых компонентов OpenDialog и SaveDialog, вторая — с помощью специального компонента Image. 8.2.1. Диалоговые окна открытия и сохранения файла Шаг 30. Диалоговые окна для выбора открываемого или сохраняемого файла организуются с помощью компонентов OpenDialog и SaveDialog (рисунок 8.29). Найдите их в палитре компонентов на вкладке Dialogs и поместите на форму. Первый компонент назовите OpenDialog, а второй — SaveDialog. Рисунок 8.28. Компоненты OpenDialog и SaveDialog Характерные свойства этих компонентов кратко описаны в таблице 8.6.
Таблица 8.6. Важнейшие свойства и события компонентов |