Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: 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 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
14-1106209033
WondeRu
2005-01-20 11:17
2005.02.13
То чем пользуются на форуме, но не все это понимают :)


14-1106653655
Ega23
2005-01-25 14:47
2005.02.13
Зацепило сильно...


3-1105530031
Jann
2005-01-12 14:40
2005.02.13
конвертация из dbf в txt


14-1106582077
netnetnet
2005-01-24 18:54
2005.02.13
.net


3-1105955005
alexe
2005-01-17 12:43
2005.02.13
Переход с Access`97 на 2000 на Delphi 5