![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с системным меню [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