![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Menu средствами Windows API [D6, WinXP]
oleg_SYS © (2005-02-16 16:21:00)Уважаемые мастера, мне очень нужен пример создания Menu (как TPopupMenu в VCL) средствами Windows API, разумеется, с подменю и с определением выбранного элемента. Того, кто мне поможет, ждёт символическое вознаграждение: 8-значный XY номер от ICQ 52552552 с пм.
Связаться со мной можно по асе 446467 или мылу oleg_SYS@mail.ru
Спасибо!
Grief (2005-02-17 07:15:00) [1]Хотется спросить, а как присобачить у ентого самого попапа слева битмап? как в меню пуск 98 окон
oleg_SYS (2005-02-16 23:22:00) [2]Всё работает, асю дал :)
oleg_SYS (2005-02-16 22:01:00) [3]Всё работает, асю дал :)
Kerk (2005-02-16 21:01:00) [4]выдрано из моего исходника (поэтому немного лишнего тут :))
procedure ShowMenu;
var
P: TPoint;
Mnu: HMENU;
begin
Mnu := CreatePopupMenu;
AppendMenu(Mnu,0,100,'О программе...');
AppendMenu(Mnu,MF_SEPARATOR,0,nil);
AppendMenu(Mnu,0,101,'Очистить статистику');
AppendMenu(Mnu,0,102,'Закрыть');
GetCursorPos(P);
SetForegroundWindow(handleWnd);
TrackPopupMenu(Mnu,TPM_RIGHTALIGN,P.X,P.Y,0,handleWnd,nil);
PostMessage(handleWnd,WM_NULL,0,0);
DestroyMenu(Mnu);
end;
procedure ProcessMenu(const ID: Word);
begin
case ID of
100: MessageBox(0,sMouseMonitor + ' ' + sVer +#13#10#13#10+
'Dedicated to P.A.V.'#13#10'c2004 Roman Jankovski aka Kerk',
'О программе...',MB_ICONINFORMATION+MB_SETFOREGROUND);
101: if MessageBox(0,'Очистить статистику?',
sMouseMonitor,MB_YESNO+MB_ICONQUESTION+MB_SETFOREGROUND) = IDYES then
begin
SetFilePointer(F,0,nil,FILE_BEGIN);
SetEndOfFile(F);
end;
102: if MessageBox(0,'Вы действительно хотите закрыть '+sMouseMonitor+'?',
sMouseMonitor,MB_YESNO+MB_ICONQUESTION+MB_SETFOREGROUND) = IDYES then
DestroyWindow(handleWnd);
end;
end;
function WindowProc(Window: HWND; aMessage, wParam,
lParam: LongInt): LongInt; stdcall;
begin
Result := DefWindowProc(Window,aMessage,wParam,lParam);
case AMessage of
CAT_WRITE: WriteToFile(wParam,lParam);
CAT_TRAYICON:
if (lParam = WM_LBUTTONDOWN) or (lParam = WM_RBUTTONDOWN) then ShowMenu;
WM_DESTROY: DestroyWnd;
WM_COMMAND: ProcessMenu(wParam);
end;
end;
давай восьмизнак раз обещал :))))
oleg_SYS (2005-02-16 20:55:00) [5]dimaxx, информация о меню с помощью апи в интернете есть, но когда начинаю реализовывать, меню то не создаётся вовсе, то становится толшиной 5 пикселов, а мне нужно срочно заканчивать программу.
dimaxx (2005-02-16 20:23:00) [6]Могу предложить только набор функций для создания меню, а реализация - эт за тобой.