Текущий архив: 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