Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];

Вниз

Назначение горячих клавиш для окна созданного на winapi   Найти похожие ветки 

 
Intranull   (2010-08-05 20:56) [0]

Приветствую.

Подскажите как обработать горячии клавиши в окне созданом на winapi.
Код примера назначения горячих клавиш который использую:


//В обработчике события OnCreate
//основной формы создаём горячую клавишу:

if not RegisterHotkey(Handle, 1, MOD_ALT or MOD_SHIFT, VK_F9) then
 ShowMessage("Unable to assign Alt-Shift-F9 as hotkey.");

//В событии OnClose удаляем горячую клавишу:
UnRegisterHotkey( Handle, 1 );

//Добавляем обработчик в форму для сообщения
//WM_HOTKEY:

private // в секции объявлений формы
 procedure WMHotkey( var msg: TWMHotkey ); message WM_HOTKEY;

procedure TForm1.WMHotkey( var msg: TWMHotkey );
begin
 if msg.hotkey = 1 then
 begin
   if IsIconic( Application.Handle ) then
     Application.Restore;
   BringToFront;
 end;
end;


Пытаюсь обработать так:


function MainWndProc(hWindow: HWND; Msg: UINT; wParam: wParam;
 lParam: lParam): LRESULT; stdcall; export;
begin
 Result := 0;
 case Msg of

   WM_HOTKEY:
     begin
          ShowMessage("1");
     end;

 else
   begin
     Result := DefWindowProc(hWindow, Msg, wParam, lParam);
     Exit;
   end;
 end;
end;


При создании окна:

window.lpfnWndProc := @MainWndProc;

После создания окна регистрирую горячие клавиши:

RegisterHotkey(WindowHandle, 1, MOD_ALT or MOD_SHIFT, VK_F9);

Где WindowHandle указатель на создаваемое окно

В итоге MainWndProc вообще не вызывается.

Может есть какой другой способ? Хуком не пойдет так как dll использовать нельзя - запрет заказчика.


 
KilkennyCat ©   (2010-08-05 21:13) [1]


> В итоге MainWndProc вообще не вызывается.

это как это?
может, она вызывается все-таки, только делает немного не то, что хочется, а?


 
Intranull   (2010-08-05 21:24) [2]

Ставил брекпоинт, до него на доходит управление.

Немного переделал:


function WindowProc(wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
begin
 case msg of
   WM_Destroy:
     begin
       PostQuitMessage(0);
       Result := 0;
       Exit;
     end;

    WM_HOTKEY:
     begin
       ShowMessage("1");
     end;

 else
   Result := DefWindowProc(wnd, msg, wparam, lparam);
 end;
end;


Вот код создания окна:


var
 InParam: Variant;
 window: TWndClassEx;
 WindowHandle: HWND;
 iSize: integer;
begin
 window.cbSize := sizeof(window);
 window.style := CS_HREDRAW or CS_VREDRAW;
 window.lpfnWndProc := @WindowProc;
 window.cbClsExtra := 0;
 window.cbWndExtra := 0;
 window.hInstance := HInstance;
 window.hIcon := LoadIcon(0, IDI_APPLICATION);
 window.hCursor := LoadCursor(0, IDC_ARROW);
 window.hbrBackground := Color_BtnFace + 12;
 window.lpszMenuName := nil;
 window.lpszClassName := "Main_Window";
 RegisterClassEx(window);
 WindowHandle := CreateWindowEx(0, "Main_Window", "First_WinAPI_Program", WS_OVERLAPPEDWINDOW, 0, 0, 5000, 0, 0, 0, Hinstance, nil);


Думаю ошибка в создании окна, только где понять не могу.


 
Intranull   (2010-08-05 21:54) [3]

разобрался.


var
InParam: Variant;
window: TWndClassEx;
WindowHandle: HWND;


Нужно было выносить в глобальные переменные.

глупая ошибка.

Всем спасибо.


 
Leonid Troyanovsky ©   (2010-08-06 07:21) [4]


> Intranull   (05.08.10 21:54) [3]

> глупая ошибка.

И не одна.

--
Regards, LVT.



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

Форум: "Начинающим";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.061 c
15-1280095096
0x00FF00
2010-07-26 01:58
2010.10.31
DMClient под Linux?


4-1240980041
ForumReader
2009-04-29 08:40
2010.10.31
Как получить список всех "дочек" элемента, если они одинаковы?


2-1281093695
Stenfit
2010-08-06 15:21
2010.10.31
TXMLDocument


15-1279531274
Anatoly Podgoretsky
2010-07-19 13:21
2010.10.31
Настал момент такой


2-1281327877
linuxoid
2010-08-09 08:24
2010.10.31
нужен алгоритм для зарисовка элементов в treeview





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский