Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Bitmap to SystemMenu


Автор: NieL 5.1.2009, 12:06
Добавляю новый пункт в системное меню приложения. Вот собственно код:

Код

var
  hSysMenu: HMENU;
  B: TBitmap;
  miInfo: TMenuItemInfo;
begin
  hSysMenu := GetSystemMenu(Handle, False);
  InsertMenu(hSysMenu,
    5, MF_BYPOSITION, SC_HELP, 'Справка');
  B := TBitmap.Create;
  B.LoadFromFile('D:\1.bmp');
  FillChar(miInfo, SizeOf(TMenuItemInfo), #0);
  miInfo.cbSize := SizeOf(TMenuItemInfo);
  miInfo.fMask := MIIM_BITMAP;
  miInfo.hbmpItem := B.Handle;
  SetMenuItemInfo(hSysMenu, SC_HELP, False, miInfo);


Проблема возникает при выборе добавленного пункта (инвертируюся цвета, фон становиться черного цвета, Transparent = True не помогает). Прбовал добавлять иконку к моему пункту меню иначе, через SetMenuItemBitmaps, но тут тоже что-то не то, иконка масштабируется со сдвигом вправо, и таким образом не вмещается в пункт меню, Как избавиться от данной проблемы? 

Код

var
  hSysMenu: HMENU;
  B: TBitmap;
  miInfo: TMenuItemInfo;
begin
  hSysMenu := GetSystemMenu(Handle, False);
  InsertMenu(hSysMenu,
    5, MF_BYPOSITION, SC_HELP, 'Справка');
  B := TBitmap.Create;
  B.LoadFromFile('D:\1.bmp');
  SetMenuItemBitmaps(hSysMenu,  5, MF_BYPOSITION, B.Handle, B.Handle);



Автор: Rrader 5.1.2009, 12:28
Цитата(NieL @  5.1.2009,  18:06 Найти цитируемый пост)
иконка масштабируется со сдвигом вправо, и таким образом не вмещается в пункт меню

Иконка должна иметь размеры :
Ширина - GetSystemMetrics(SM_CXMENUCHECK)
Высота - GetSystemMetrics(SM_CYMENUCHECK)

Автор: NieL 5.1.2009, 12:36
Цитата(Rrader @  5.1.2009,  12:28 Найти цитируемый пост)
Иконка должна иметь размеры :

А можно ли установить размеры для пункта меню? , и почему-то когда иконка добавляется через первый вариант она размещается в пункте меню корректно?

Автор: Rrader 5.1.2009, 13:13
Цитата(NieL @  5.1.2009,  18:36 Найти цитируемый пост)
и почему-то когда иконка добавляется через первый вариант она размещается в пункте меню корректно?

Потому что функции работают по-разному. Предпочтительнее SetMenuItemBitmaps. Насчет инвертирования - при любом раскладе будет так, если не брать это дело под контроль smile 

Автор: NieL 5.1.2009, 13:23
Цитата(Rrader @  5.1.2009,  13:13 Найти цитируемый пост)
 Предпочтительнее SetMenuItemBitmaps.

Ну а можно ли все-таки оставить текущие размеры иконки (16x16) и разместить ее в пункте меню.

Автор: Rrader 5.1.2009, 13:38
Тогда SetMenuItemInfo, что непонятного? smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)