Значки в пунктах меню

Каждый пункт меню помимо текста может содержать красочный значок, наглядно поясняющий назначение пункта. Самый простой способ создания значка в пункте меню - установить свойство 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, Normal Size и Double Size контекстного меню.

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

Шаг 29. Кстати, мы совсем забыли про значок, все еще хранящийся в свойстве Bitmap компонента OpenMenuItem. Сейчас в нем нет необходимости, поскольку реально используется значок, заданный с помощью свойства ImageIndex. Чтобы не держать в программе ненужные данные, удалите значок из свойства Bitmap. Для этого вызовите дизайнер меню для компонента MainMenu и выберите пункт Open.... Далее в окне свойств перейдите к свойству Bitmap и нажмите клавишу Del, после чего нажмите клавишу Enter.

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

Полноценное приложение для просмотра графических файлов

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

· организовать выбор файла по командам меню Open... и Save As...;

· реализовать загрузку и отображение рисунка.

Первая задача решается с помощью стандартных диалоговых компонентов OpenDialog и SaveDialog, вторая - с помощью специального компонента Image.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: