Вниз
Скачать: CL | DM;

Событие клик по элементы системного меню   Найти похожие ветки 

 
tradakad   (2004-12-24 14:47) [0]

я добпаляю в системное меню окна новый пункт

 hMenuHandle := GetSystemMenu(Handle, FALSE);
 if (hMenuHandle <> 0) then
 begin
 AppendMenu(hMenuHandle,MF_STRING,0,"test");
 end;

и хочу обработать нажатие кнопки мыши на этом пункте
пытаюсь сделать это так

function WindowProc(hwnd, msg, wparam, lparam:longint):longint;stdcall;
begin
 Result:=DefWindowProc(hwnd,msg,wparam,lparam);
 case Msg of
   WM_MENUSELECT: if wparam=0 then p_Menu_Item_on_Click;
 end;
end;

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


 
DVM ©   (2004-12-24 14:50) [1]

WM_COMMAND


 
tradakad   (2004-12-24 15:07) [2]

a какие параметры в WM_COMMAND проверять?
к примеру нажатия кнопока проверяю так.
   WM_COMMAND :
   begin
   if lparam=hMsgBtn then Click;
   if lparam=hMsgBtn2 then Click_Tray;
как я думаю
if lParamLo=0 - то это указывает что сообщение от меню.
а как узнать что это было именно от конкретного пункта меню?


 
tradakad   (2004-12-24 16:31) [3]

спасибо за ответ но только я сделал так
function WindowProc(hwnd, msg, wparam, lparam:longint):longint;stdcall;
begin
 Result:=DefWindowProc(hwnd,msg,wparam,lparam);
 case Msg of
   WM_SYSCOMMAND:
   begin
   if wparam=17 then Click;
   if wparam=18 then Click_Tray;
   end;
 end;
end;

hSysMenuHandle := GetSystemMenu(Handle, FALSE);
 if (hSysMenuHandle <> 0) then
 begin
 AppendMenu(hSysMenuHandle,MF_STRING,17,"17");
 AppendMenu(hSysMenuHandle,MF_STRING,18,"18");
 end;


 
Leonid Troyanovsky ©   (2004-12-25 11:50) [4]


> tradakad   (24.12.04 16:31) [3]
> спасибо за ответ но только я сделал так
> function WindowProc(hwnd, msg, wparam, lparam:longint):longint;stdcall;
> begin
>  Result:=DefWindowProc(hwnd,msg,wparam,lparam);
>  case Msg of
>    WM_SYSCOMMAND:
>    begin
>    if wparam=17 then Click;
>    if wparam=18 then Click_Tray;
>    end;
>  end;
> end;
>


In WM_SYSCOMMAND messages, the four low-order bits of the uCmdType parameter are used internally by Windows. To obtain the correct result when testing the value of uCmdType, an application must combine the value 0xFFF0 with the uCmdType value by using the bitwise AND operator.

&

An application can carry out any system command at any time by passing a WM_SYSCOMMAND message to DefWindowProc. Any WM_SYSCOMMAND messages not handled by the application must be passed to DefWindowProc. Any command values added by an application must be processed by the application and cannot be passed to DefWindowProc.

Т.е.,


const
 cm_MyCommand = $00A0;

procedure TForm1.FormCreate(Sender: TObject);
var
 Menu: HMenu;
begin
 Menu := GetSystemMenu(Handle, False);
 AppendMenu(Menu, mf_String, cm_MyCommand, "My command...");
 Menu := GetSystemMenu(Application.Handle, False);
 AppendMenu(Menu, mf_String, cm_MyCommand, "My command...");
end;

procedure TForm1.WMSysCommand(var Message: TWMSysCommand); // message WM_SYSCOMMAND;
begin
 case Message.CmdType of
   cm_MyCommand: ShowMessage("My Command");
 else
   inherited;
 end;
end;


--
С уважением, LVT.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.032 c
14-1106449696
Думкин
2005-01-23 06:08
2005.02.13
С Днем рождения! 23 января


14-1105954273
pasha_golub
2005-01-17 12:31
2005.02.13
Социальная реформа в России. Противостояние.


3-1105615431
Junior
2005-01-13 14:23
2005.02.13
ADO или AccessApplication нужно добавить таблицу в .mdb


6-1101750607
AdmeraL
2004-11-29 20:50
2005.02.13
Internet


14-1106230703
Alexander Panov
2005-01-20 17:18
2005.02.13
Питерцы, старый телевизор нужен?




   Наверх