Вниз
Скачать: 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.025 c
1-1106744363
Raider
2005-01-26 15:59
2005.02.13
Исходник звонилки


4-1104140322
Olga_b
2004-12-27 12:38
2005.02.13
Работа с Gameport


1-1107155471
КаПиБаРа
2005-01-31 10:11
2005.02.13
Главная форма как в Delphi IDE


8-1098894068
Sonic_gd
2004-10-27 20:21
2005.02.13
Неработает mediaPlayer


1-1107174049
Andarkl
2005-01-31 15:20
2005.02.13
Иконки из файла




   Наверх