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

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

Проблема с системным меню [WinXP]


Anar ©   (2002-10-30 16:30:00) 

Как правильно поместить свой пункт в системное меню?
Если написать:


...
procedure SystemMenu(var Msg:TMessage);message WM_SysCommand;
...
implementation

const IDM_New=$C0;
{$R *.dfm}

procedure TForm1.SystemMenu(var Msg:TMessage);
begin
If Msg.WParam=IDM_New then ShowMessage("My menu item selected.");
Inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
Var SM:Hmenu;
begin
SM:=GetSystemMenu(Application.Handle,False);
InsertMenu(SM,UINT(3),MF_ByPosition,IDM_New,"My menu");
end;
...


в системном меню появляется пункт "My menu", но при его нажатии ничего не происходит, хотя должно выводиться сообщение "My meu item selected."

В чём глюк?


Anar   (2002-11-03 17:02:00) [1]

Спасибо Ученик!
Всё получилось!


Alex4444444444   (2002-11-03 12:29:00) [2]

Mozhet, GetSystemMenu(Handle,...) ?
Application.Handle <> MainForm.Handle !
I eshe: luchshe, navernoe, dobavlyat" item ne v OnCreate,
a perepisat" (v smysle, override) TForm1.CreateWnd, t.k.
inache vse propadet posle RecreateWnd.


Ученик   (2002-11-03 10:17:00) [3]

function TForm1.DoMessage(var Message : TMessage) : Boolean;
begin
if (Message.Msg = WM_SYSCOMMAND) and (Message.WParam = IDM_New) then begin
ShowMessage("My menu item selected.");
Result := True
end else
Result := False
end;

procedure TForm1.FormCreate(Sender: TObject);
Var
SM:Hmenu;
begin
SM:=GetSystemMenu(Application.Handle,False);
InsertMenu(SM,UINT(3),MF_ByPosition,IDM_New,"My menu");
Application.HookMainWindow(DoMessage)
end;


Anar   (2002-11-03 00:47:00) [4]

На сайте этом взяли просто Handle, а не Application.Handle, в связи с чем, программа добавляет пункт только в системное меню заголовка программы.

А метод который предложил Marcus к сожалению тоже не работает.
Ну что за ерунда? Неужели никто раньше с этим не сталкивался?


KME   (2002-11-01 17:18:00) [5]

Зайди на www.delphixfiles.narod.ru


Marcus   (2002-11-01 17:14:00) [6]

procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;

procedure TMyForm.WMSysCommand(var Message: TWMSysCommand);
begin
if (Message.CmdType = IDM_New) then
...
end;


Anar   (2002-11-01 15:34:00) [7]

Опять не помогает!
Ну что за глюк...:(
Почему так... Уже всё попробовал. Ничего! ZERO Effect.
МАСТЕРА, ВЫ ДОЛЖНЫ ЗНАТЬ ОТВЕТ! ОТЗОВИТЕСЬ!


Arcus   (2002-10-31 15:50:00) [8]

Попробуй так
if Msg.WParam and $FFF0 =

Насчет маски уточни в хелпе. Для стандартных команд из системного меню нужна именно такая.


Anar   (2002-10-31 14:37:00) [9]

А ты сам пробовал? Почему-то не помогает.
Внимательно посмотри на код, может чё то не то.
Вообще кто про это может что-нидь сказать?


Song   (2002-10-30 16:36:00) [10]

WM_COMMAND


Наверх

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