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

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

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]

Могу предложить только набор функций для создания меню, а реализация - эт за тобой.


Наверх

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