Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Горячие клавиши WM_HOTKEY в KOL


Fanny ©   (2004-12-22 13:20:00) 

на http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=15-988621066есть пример установки Горячих клавиш, но в KOL возникла проблема - после написания раздела PROTECTED procedure HotKey(var msg:TMessage); message WM_HOTKEY; он ругается и говорит что-то про public (в следующей строке). Может есть какая-то "фича" в написании этой процедуры в KOL?


mdw   (2004-12-24 11:26:00) [1]

Вот пример. Я здесь по нажатию Control+'<' и Control+'>' ставлю типогравские кавычки.

procedure TMainForm.KOLFormFormCreate(Sender: PObj);
begin
   RegisterHotKey(Form.Handle, GlobalAddAtom('TV_CONTROL_QuoteL'), MOD_CONTROL, 188);
   RegisterHotKey(Form.Handle, GlobalAddAtom('TV_CONTROL_QuoteR'), MOD_CONTROL, 190);
end;
procedure TMainForm.KOLFormDestroy(Sender: PObj);
begin
   UnregisterHotKey(Form.Handle, GlobalAddAtom('TV_CONTROL_QuoteL'));
   UnregisterHotKey(Form.Handle, GlobalAddAtom('TV_CONTROL_QuoteR'));
end;
function TMainForm.KOLFormMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
   Result:= False;
   if (Form.Focused) and (Msg.message = WM_HOTKEY) then begin
     if (Form.Focused) and (LoWord(Msg.lParam) = MOD_CONTROL) and (HiWord(Msg.lParam)=188) then
       if EditBox.Focused then SendMessage(EditBox.Handle, WM_CHAR, ord('«'), LPARAM($00000001 or $40000000 or $80000000));
     if (Form.Focused) and (LoWord(Msg.lParam) = MOD_CONTROL) and (HiWord(Msg.lParam)=190) then
       if EditBox.Focused then SendMessage(EditBox.Handle, WM_CHAR, ord('»'), LPARAM($00000001 or $40000000 or $80000000));
   end;
end;


Fanny   (2004-12-24 09:55:00) [2]

хе... я так и думал !

ну а если я сделаю как:

if Msg.message = WM_HOTKEY then
   begin
 
   end;

то что мне ловить? Так называемый wParam?
или VK_Fx + проверка на Alt, Ctrl, Shift?


ECM   (2004-12-22 15:51:00) [3]

Вопрос : Как обрабатывать произвольное сообщение WM_XXX?

Элементарно :) Надо использовать событие OnMessage, которое есть у любого (практически, в разумных пределах) компонента. Делаем так:
function TForm1.KOLForm1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
begin
 Result:=False;
 if Msg.message=WM_XXX then
 begin
   // тут идет работа с сообщением, делаем что хотим
   // фактически OnXXX
   // Если мы не хотим, что бы это сообщение
   // обрабатывалось еще другим (стандартным) обработчиком
   // пишем
   // Result:=True;
   // Если функция должна что―то возвращать системе в
   //ответ на сообщение, то пишем следующее:
   // Rslt:=What_you_must_to_return;
 end;
end;

Rslt - это то, что возвращается системе в ответ на сообщение. Result - это для процедуры перечисления динамических обработчиков событий. Сигнал, что надо прекратить дальнейшую обработку (true). А дальше - по обстоятельствам. Если Result=FALSE, то Rslt установится следующим обработчиком или обработчиком по умолчанию. Обычно Result устанавливается в TRUE одновременно с установкой нужного Rslt, когда дальнейшая обработка уже точно не нужна или вредна.  

Это из FAQ-а kol.mastak.ru - пока он не работает :)


ECM   (2004-12-22 15:48:00) [4]

А проще - поставь обработчик WM_HOTKEY в OnMessage Applet-а


ECM   (2004-12-22 15:44:00) [5]

FAQ http://bonanzas.rinet.ru/r_faq.htm#Q18


Наверх

Титульная страница Поиск, карта сайта Написать письмо