Главная страница
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.029 c
1-1106756062
Blond
2005-01-26 19:14
2005.02.13
Помощь в delphi7


1-1107195857
Lyoha
2005-01-31 21:24
2005.02.13
Где скачать Дельфи?


3-1106035711
Bless
2005-01-18 11:08
2005.02.13
Можна ли сделать, чтобы внутри транзакции часть кода не откатывал


3-1105636223
tytus
2005-01-13 20:10
2005.02.13
Как лучше удалить записи из БД?


14-1106744539
NeyroSpace
2005-01-26 16:02
2005.02.13
Что обозначает БЕЛЫЙ цветочек в ICQ?