абрикос
Основной особенностью интерфейса Windows является отображение красочных значков. Значки не только украшают рабочий стол Windows, но и облегчают интуитивное управление, обеспечивая удобство для пользователей. Стиль Windows является хорошим ориентиром при проектировании интерфейсов программ.
Delphi обычно предоставляет два метода установки значков: один – указать значок приложения в параметрах проекта, а другой – указать атрибут Icon на странице свойств инспектора объектов. Если вы хотите создать всплывающее меню, столь же красивое, как меню «Пуск» Windows, вам придется написать код самостоятельно.
Мы знаем, что большинство приложений Windows сами имеют значки. Если вы вынесете значки из самой программы, отрегулируете размер значка и добавите его во всплывающее меню, получится красивое меню.
Сначала используйте ExtractAssociatedIcon, чтобы получить значок из определенной программы. Однако размер значка может быть разным и его нельзя добавить напрямую в меню. В то же время Delphi не предоставляет функции настройки размера значка, поэтому Файл значка необходимо преобразовать в растровый файл. Затем отрегулируйте размер растрового файла и, наконец, замените пункты меню растровым файлом. Его исходный код выглядит следующим образом:
тип
ТФорм1 = класс (ТФорма)
ГлавноеМеню1: ТМаинМеню;
Файл1: TMenuItem;
/****Пункты в строке меню****/
Открыть1: TMenuItem;
/****пункты в файле меню****/
процедура FormCreate (Отправитель: TObject);
процедура FormShow (Отправитель: TObject);
частный
{объявление локального параметра}
общественный
{объявление глобального параметра}
Icn, Txt, MnuItm: TBitmap;
конец;
процедура TForm2.FormCreate(Отправитель: TObject);
вар R: TRect;
HIcn: HIcon;
Ic: TIcon;
Индекс: Слово;
Имя файла: PChar;
начинать
/**Получить значок из программы**/
Ic:=TIcon.Create;
Ic.Handle:=ExtractAssociatedIcon(Hinstance, /*имя файла и путь*/, Index);
/** Создать растровое изображение**/
Txt:=TBitmap.Create;
с Txt сделать
начинать
Ширина:=Canvas.TextWidth('Тест');
Height:=Canvas.TextHeight('Tes');
Canvas.TextOut(0,0, «Тест»);
конец;
/**Скопируйте значок в созданное выше растровое изображение и настройте его размер**/
Icn:=TBitmap.Create;
с ICN делаю
начинать
Ширина:=32;
Высота:=32;
Кисть.Цвет:=clBtnFace;
Холст.Draw(0,0,Ic);
конец;
/** Создаем окончательный файл растрового изображения**/
MnuItm:=TBitmap.Create;
с MnuItm сделать
начинать
Ширина:=Тхт.Ширина+18;
Высота:=18;
с холстом сделать
начинать
Кисть.Цвет:=clBtnFace;
Pen.Color:=clBtnFace;
Brush.Style:=bsSolid;
Прямоугольник (0,0, Ширина, Высота);
CopyMode:=cmSrcAnd;
StretchDraw(Rect(0,0,16,16),Icn);
CopyMode:=cmSrcAnd;
Draw(16,8-(Txt.Height div 2),Txt);
конец;
конец;
конец;
процедура TForm2.FormShow(Отправитель: TObject);
вар
Информация об элементе: TMenuItemInfo;
hBmp1:THandle;
начинать
HBmp1:=MnuItm.Handle;
с ItemInfo сделать
начинать
cbSize:= SizeOf(ItemInfo);
fMask:= MIIM_TYPE;
fType:= MFT_BITMAP;
dwTypeData:= PChar(MakeLong(hBmp1, 0));
конец;
/** Заменяем пункт меню Open1 растровым изображением **/
SetMenuItemInfo( GetSubMenu( MainMenu1.Handle, File1.MenuIndex ),
Open1.MenuIndex, правда, ItemInfo);
конец;
Вышеуказанная программа была отлажена в средах Windows98 и Delphi 4.0.