![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать меню с помощью Win API? [D6, WinXP]
oleg_SYS © (2005-02-04 10:03:00)У меня почему-то получается меню размером где-то 5X10 и мне не удаётся узнать выбранный пункт меню. В чём ошибка?
…
procedure MenuSelect(var msg : TMessage); message wm_MenuSelect;
…
var
h : integer;
…
procedure TForm1.MenuSelect;
var
d : array[0..49] of Char;
begin
GetMenuString(h,msg.WParam,d,50,0);
form1.Caption:=strpas(d);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f : integer;
begin
h := CreateMenu;
AppendMenu(h,MF_STRING,123456,'MyText');
if TrackPopupMenu(h,TPM_CENTERALIGN or TPM_LEFTBUTTON or TPM_RETURNCMD,50,50,0,form1.Handle,nil) then
ShowMessage(‘Выбран пункт меню: ' + Form1.Caption);
DestroyMenu(h);
end;
…
alpet (2005-02-04 12:41:00) [1]Для меню надо делать обработчики сообщений.
Функция TrackPopupMenu всего лишь выводит его, и ждет пока пользователь не выберет какой нибудь пункт.
После этого в форму посылается сообщение WM_COMMAND, и в параметре wParam находится индетификатор элемента меню.
Функцию обработки сообщения надо создать в классе формы:
TForm1 = class (TForm)
...
public
procedure OnCommand (var msg: TMessage); message WM_COMMAND;
end;
В реализации этой функции можно обработать выбор тех или иных пунктов:
procedure OnCommand (var msg: TMessage);
begin
if (LoWord (msg.wParam) = MI_ID01) then
// Код ...
end;