Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.22;
Скачать: CL | DM;

Вниз

Как на Delphi посредством WIN32API создать MainMenu   Найти похожие ветки 

 
chak_xakep   (2008-03-21 16:42) [0]

Здравствуйте мастера программирования помогите со следующими проблемами:
1.Следует создать MainMenu; - сделал
2.Загрузить в каждый из подпунктов меню Изображение HBITMAP
Ниже приведен мой исходный код главного окна, с процедурой обработки сообщений окна разобрался:

procedure CreateMainWindow;
var
 AMessage: TMsg;
 AWindowClassEx: TWndClassEx;
begin
 MainMenu := CreateMenu;
 AWindowClassEx.cbSize:= sizeOf(TWndClassEx);
 AWindowClassEx.lpszClassName:= WINDOW_CLASS_NAME;
 AWindowClassEx.style:= CS_VREDRAW or CS_HREDRAW;
 AWindowClassEx.hInstance:= HInstance;
 AWindowClassEx.lpfnWndProc:= @HandlerToMainWindow;
 AWindowClassEx.cbClsExtra:= 0;
 AWindowClassEx.cbWndExtra:= 0;
 AWindowClassEx.hIcon:= LoadIcon(hInstance, MakeIntResource("MAINICON"));
 AWindowClassEx.hIconSm:= LoadIcon(hInstance, MakeIntResource("MAINICON"));
 AWindowClassEx.hCursor:= LoadCursor(0, idc_Arrow);
 AWindowClassEx.hbrBackground:= 16;
 AWindowClassEx.lpszMenuName:= nil;
 if RegisterClassEx(AWindowClassEx) = 0
 then
   PostQuitMessage(0)
 else
 begin
   MenuFile:= CreatePopupMenu;
   MenuAbout:= CreatePopupMenu;
   AWindowHandle:= CreateWindowEx(0,
                                  AWindowClassEx.lpszClassName,
                                  WINDOW_TITLE,
                                  DS_MODALFRAME or
                                  WS_MINIMIZEBOX or
                                  WS_CAPTION or
                                  WS_SYSMENU,
                                  ALeft, ATop,
                                  WINDOW_WIDTH, WINDOW_HEIGHT,
                                  0,
                                  MainMenu,
                                  HInstance,
                                  nil);
   CreateMenuItem(MainMenu, MenuFile, "Файл", 0, MENU_FILE, False);
   CreateMenuItem(MenuFile, 0, "Выход", 0, SUBMENU_EXIT, False);
   CreateMenuItem(MainMenu, MenuAbout, "Справка", 0, MENU_ABOUT, False);
   CreateMenuItem(MenuAbout, 0, "О программе...", 0, SUBMENU_ABOUT, False);
   DrawMenuBar(AWindowHandle);
   CreateControls;
   RegisterHotkey(AWindowHandle, 1, MOD_ALT,ord("A"));
   if AWindowHandle = 0
   then
     PostQuitMessage(0)
   else
   begin
     ShowWindow(AWindowHandle, SW_SHOWNORMAL);
     while GetMessage(AMessage, 0, 0, 0) do
     begin
       TranslateMessage(AMessage);
       DispatchMessage(AMessage);
     end; {while}
   end; {else}
 end; {else}
end;

Вопрос, как загрузить картинки на каждый пункт меню??? Пожалуйста дайте хотя бы ссылки на счет этой темы!!!


 
tesseract ©   (2008-03-21 16:49) [1]


> Вопрос, как загрузить картинки на каждый пункт меню??? Пожалуйста
> дайте хотя бы ссылки на счет этой темы!!!


Ты не на API программируешь. А на чём-то странном. На API делаеться через CreateMenu / InsertMenuItem и там есть структура MENUITEMINFO

typedef struct tagMENUITEMINFO {
 UINT    cbSize;
 UINT    fMask;
 UINT    fType;
 UINT    fState;
 UINT    wID;
 HMENU   hSubMenu;
 HBITMAP hbmpChecked;     <-- раз
 HBITMAP hbmpUnchecked;  <-- два
 ULONG_PTR dwItemData;
 LPTSTR  dwTypeData;
 UINT    cch;
 HBITMAP hbmpItem;    
} MENUITEMINFO, *LPMENUITEMINFO;


 
chak_xakep   (2008-03-21 16:53) [2]

tesseract это Сишный код, а пример есть???


 
tesseract ©   (2008-03-21 16:59) [3]

ну вот твоя структура на pascal.

 tagMENUITEMINFOA = packed record
   cbSize: UINT;
   fMask: UINT;
   fType: UINT;             { used if MIIM_TYPE}
   fState: UINT;            { used if MIIM_STATE}
   wID: UINT;               { used if MIIM_ID}
   hSubMenu: HMENU;         { used if MIIM_SUBMENU}
   hbmpChecked: HBITMAP;    { used if MIIM_CHECKMARKS}
   hbmpUnchecked: HBITMAP;  { used if MIIM_CHECKMARKS}
   dwItemData: DWORD;       { used if MIIM_DATA}
   dwTypeData: PAnsiChar;      { used if MIIM_TYPE}
   cch: UINT;               { used if MIIM_TYPE}
   hbmpItem: HBITMAP;       { used if MIIM_BITMAP}
 end;

Если не понял зачем это, возвращайся на VCL или к чтению документации. Потому, как пойдут вопросы про HBITMAP и тп.

ЗЫ: VCL не зря писали.


 
chak_xakep   (2008-03-21 17:03) [4]

О, догнал в эту сторону рыть??? tesseract FOREVER!!!

function CreateMenuItem(hMenu, SubMenu: HMENU; Cap: PChar;
                       _uID, _wID: UINT; Sep: Boolean): Boolean;
var
 Mi: MENUITEMINFO;
begin
 with Mi do
   begin
     cbSize:= SizeOf(Mi);
     fMask:= MIIM_STATE or MIIM_TYPE or MIIM_SUBMENU or MIIM_ID;
     if not Sep
       then fType:= MFT_STRING
       else fType:= MFT_SEPARATOR;
     fState:= MFS_ENABLED;
     wID:= _wID;
     hSubMenu:= SubMenu;
     dwItemData:= 0;
     dwTypeData:= Cap;
     cch:= SizeOf(Cap);
   end;
 Result:= InsertMenuItem(hMenu, _uID, false, Mi);
end;

tesseract УВАЖУХА!!! <br>


 
{RASkov} ©   (2008-03-21 17:13) [5]

> tesseract FOREVER!!!

> tesseract УВАЖУХА!!!


> tesseract ©

О как... подфорсило :)


 
tesseract ©   (2008-03-21 17:18) [6]


> О как... подфорсило :)


Бывает :-) хорошо что на MFC под delphi не пишут :-)



Страницы: 1 вся ветка

Текущий архив: 2009.02.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
15-1230097799
Кое кто
2008-12-24 08:49
2009.02.22
Как играть в малые шахматы(6x6)?


11-1183565514
Delphuk
2007-07-04 20:11
2009.02.22
Работа с TreeView


10-1152894438
TStas
2006-07-14 20:27
2009.02.22
Как вписывать что-то в вордовскую таблицу?


15-1230372262
инструкция
2008-12-27 13:04
2009.02.22
при перезаагрузке/выключении вылазит ошибка:


2-1231875392
smartleds
2009-01-13 22:36
2009.02.22
Вопрос по созданию формы