Главная страница

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


Скачать 2.61 Mb.
НазваниеУчебное пособие для студентов Авторы А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четырько Содержание Содержание 1
Дата15.01.2023
Размер2.61 Mb.
Формат файлаdoc
Имя файлаlab_OOTP.doc
ТипУчебное пособие
#886736
страница22 из 33
1   ...   18   19   20   21   22   23   24   25   ...   33

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 — все хранимые значки должны иметь одинаковые размеры.

Свойство

Описание

Width, Height

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

AllocBy

Приращение массива. Когда массив полностью заполнен и делается попытка добавить новый рисунок, размер массива увеличивается на AllocBy элементов. Используется для оптимизации скорости добавления элементов и занимаемой ими памяти.

BkColor

Цвет фона. Этим цветом запоняются те части рисунков, которые должны быть прозрачными. Значение clNone оставляет фон прозрачным.

BlendColor

Цвет, которым подсвечиваются рисунки. Наличие подсветки и ее яркость зависит от значения свойства DrawingStyle.

DrawingStyle

Способ отображения рисунков:

dsFocus — легкая (25%) подсветка цветом BlendColor;

dsSelected — сильная (50%) подсветка цветом BlendColor;

dsNormal — подсветка отсутствует, цвет фона берется из свойства BkColor. Если свойство BkColor содержит значение clNone, то фон прозрачный.

dsTransparent — подсветка отсутствует, цвет фона прозрачный независимо от значения свойства BkColor.

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

ImageType

Выбирает между отображением рисунков (значение tiImage) и их масок (значение tiMask).

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

Masked

Если равно значению True, то при добавлении рисунка в список для него создается специальная маска. Маска описывает фоновые пиксели рисунка и используется при выводе рисунка на экран. Наличие маски позволяет манипулировать фоном рисунка с помощью свойств BkColor и DrawingStyle. Если свойство Masked равно значению False, то рисунок помещается в список без маски и всегда рисуется как есть. В этом случае свойство BkColor игнорируется, а значение dsTrasnparent в свойстве DrawingStyle не производит эффекта.

ShareImages

Если равно значению False, то при уничтожении компонента уничтожается также соответствующий объект операционной системы Windows, который скрыт внутри компонента ImageList. Если равно значению True, то при уничтожении компонента связанный с ним объект операционной системы не уничтожается, что позволяет использовать этот объект за пределами библиотеки VCL.

OnChange

Происходит при любом изменении списка.

Таблица 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.

Свойство

Описание

DefaultExt

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

FileName

Имя выбранного файла.

Filter

Фильтры имени файла.

FilterIndex

Номер активного фильтра.

InitialDir

Начальный каталог, открываемый при первом появлении окна диалога.

Options

Параметры, определяющие внешний вид и поведение окна диалога. (см. таблицу 8.7).

OptionsEx

Дополнительные параметры, определяющие внешний вид и поведение окна диалога (см. таблицу 8.7).

Title

Заголовок окна диалога. Если значение свойства не указано, то заголовок будет стандартным — Open (Открыть) или Save (Сохранить) в зависимости от типа компонента.

OnCanClose

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

OnClose

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

OnFolderChange

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

OnIncludeItem

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

OnSelectionChange

Происходит при смене выделенного файла или списка файлов.

OnShow

Происходит непосредственно перед отображением окна диалога на экране.

OnTypeChange

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

Таблица 8.6. Важнейшие свойства и события компонентов
1   ...   18   19   20   21   22   23   24   25   ...   33


написать администратору сайта