Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

отлов сообщений от контекстного меню


WELLiON ©   (2004-04-08 22:42:00) 

Такая проблема: никак не могу отловить, какой же пункт меню у меня выбран. Какое сообщение я должен отлавливать, чтобы узнать идентификатор выбранного пункта меню. (Если я правильно понял, то идентификатор - это то число, которое задается в процедуре insertmenuitem(menu, 2, false, item);)
Мой код:
case msg of
 wm_COMMAND:
   begin
     case lParam of
       1: messagebox(MainWnd, '123', '123', MB_OK);
       2: messagebox(MainWnd, '456', '456', MB_OK);
     end;
     RESULT:=0;
   end;
Я просто не знаю, какой именно кусок кода надо приводить. Заранее прошу прощения, если привел не то. Скажите какой нужен - я процитирую.


WELLiON   (2004-04-10 11:04:00) [1]

Вот мой код:
// ...
item.cbSize:=sizeof(menuiteminfo);
item.fType:=mft_string;
item.fMask:=MIIM_STRING or MIIM_DATA or MIIM_ID;
menu:=createpopupmenu;
item.dwTypeData:='О программе ...';
item.wID:=1;
insertmenuitem(menu, 1, false, item);
// и т.д.
setmenu(MainWnd, menu);
// ...
В остальном все также как наверху.
Прочитал описание TrackPopupMenuEx. Не объясните, что значит:
"hwnd (предпоследний параметр в моем вызове - прим.)
Дескриптор окна, имеющего контекстное меню. Окно получает все сообщения от меню, но не получает сообщение WM_COMMAND до возвращения функции."
Если я ловлю не то сообщение, то что мне надо ловить?


clickmaker   (2004-04-09 18:54:00) [2]

item.cbSize := sizeof(MENUITEMINFO);
item.fMask := MIIM_DATA or MIIM_ID;
item.wID := ID;


WELLiON   (2004-04-09 13:45:00) [3]

Ну ладно:
item.dwTypeData:='?????????';
insertmenuitem(menu, 2, false, item);
//bla-bla-bla

case msg of
 wm_COMMAND:
   begin
     case wParam of
       1: messagebox(MainWnd, '? ????????? ...', '????? ????:', MB_OK);
       2: messagebox(MainWnd, '?????????', '????? ????:', MB_OK);
       3: messagebox(MainWnd, '???????? ??????', '????? ????:', MB_OK);
       4: messagebox(MainWnd, '?????', '????? ????:', MB_OK);
     end;
     messagebox(MainWnd, PChar(inttostr(wParam)), '????? ????:', MB_OK);
     RESULT:=0;
   end;

действие происходит в оконной процедуре. Даже последний из мессаджбоксов не появляется. Подскажите плиз.Может я что-то ни то отлавливаю?
Создание меню:
TrackPopupMenuEx(menu, TPM_rightalign+tpm_bottomalign+tpm_returncmd, p.x, p.y,Mainwnd, nil);


Diamond Cat   (2004-04-08 22:54:00) [4]

wparam  а не lparam


Наверх

Титульная страница Поиск, карта сайта Написать письмо