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

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

Hook в KOL


Страницы:   1 2

Kirill ©   (2002-09-04 11:25:00) 

У меня вопрос как в чистом KOL сделать глобальный hook на клавиатуру. Т.е. у меня работает программа и находится в трее. Хочу по нажатию на Ctrl+F11 она появлялась (восстанавливалась). Желательно с примером.


Vladimir Kladov   (2002-09-20 11:26:00) [1]

Я эффекта не достиг. Кто может еще повторить?
(А может, хот-кей не назначился - перекрыт какой-нибудь программой?
Другой попробуйте. Ctrl+Alt+1, например.)

Единственное отличие, которое может повлиять на программу при запуске не из под IDE - это то, что текущая директория будет не обязательно совпадать с директорией, где лежит программа.


Kirill   (2002-09-18 18:53:00) [2]

procedure OnPMClick(Dummy: Pointer; Sender: PMenu; Item: Integer);
begin
case Item of
0: ShowWin;
1: begin
flClose:=true;
frmM.Close;
end;
end;//case
Free_And_Nil(pmnTray);
end;


Vladimir Kladov   (2002-09-14 11:22:00) [3]

Мало, меня еще заголовок интересует. Там есть dummy: Pointer для
замещения Self?


Kirill   (2002-09-13 13:35:00) [4]

case Item of
0: ShowWin;
1: begin
flClose:=true;
frmM.Close;
end;
end;//case
end; //OnPMClick

procedure ShowWin;
begin
flTray:=false;
frmM.Visible:=not flTray;
trIcon.Active:=flTray;
frmM.StayOnTop:=true;
frmM.BringToFront;
frmM.Focused:=true;
end;


Vladimir Kladov   (2002-09-13 08:15:00) [5]

Да, это я стормозил. Теперь перечитал - понятно.

Result.PopupMenu1 := NewMenu( Result.Form, 0, [
"Minimize me", "Close me", "" ], nil );
Result.PopupMenu1.AssignEvents( 0, [ Result.PopupMenu1N2Menu ] );
Result.PopupMenu1.AssignEvents( 1, [ Result.PopupMenu1N1Menu ] );


- вот такой код сгенерировался у меня, и все работает. В IDE, и без него. А как OnPMClick выглядит?


Kirill   (2002-09-11 10:51:00) [6]

Прошу прощения. Я имел ввиду, когда в IDE нажимал F9, то оно работало. А когда запускал exe-шник из проводника то программа выдавала ошибку.


Vladimir Kladov   (2002-09-11 09:53:00) [7]

Что значит в IDE работало? Когда Delphi запущен? Компилировалось? Я в растерянности, выражайтесь точнее, пожалуйства.


Kirill   (2002-09-09 18:46:00) [8]

Прошу прощения. Поторопился с предыдущим сообщением.
2Владимир:
Посмотри, пожалуйста, почему ошибка программы не в IDE появлялась в этой строчке

pmnTray:=NewMenu(edBox,0,["Показать","-","Выход"],TOnMenuItem(MakeMethod(nil,@OnPMClick))

А в IDE работала нормально.
В общем-то я ее перенес на событие от мыши в трее и она заработала.


Kirill   (2002-09-09 18:30:00) [9]

Рано обрадовался. Код рабодает только под IDE. Ехе-шник один без IDE не работает.


Kirill   (2002-09-09 16:39:00) [10]

Заработало!


Vladimir Kladov   (2002-09-09 16:05:00) [11]

Нет, просто надо так:

function TForm1.KOLApplet1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result := FALSE;
if (msg.message=WM_HOTKEY) and (msg.wParam=1001) then
begin
ShowMessage( "Hot key!" );
end;
end;

procedure TForm1.KOLForm1FormCreate(Sender: PObj);
begin
RegisterHotkey( Applet.Handle, 1001, MOD_CONTROL, VK_F12 );
end;


Kirill   (2002-09-09 14:10:00) [12]


> if (msg.message=WM_HOTKEY) and (msg.lParam=MOD_CONTROL)
> and (msg.wParam=VK_F12) then begin
> MsgOk("Ctrl + F12!");
> end;
> result:=false;
> end;

Это правильный обработчик hotkey? Он не ловит нажатие Ctrl+F12.


Vladimir Kladov   (2002-09-07 17:09:00) [13]

Result := false в OnMess.


Kirill   (2002-09-06 17:58:00) [14]

Виснит.
function OnMess(Dummy: Pointer; var Msg: TMsg; var Rslt: Integer): boolean;
begin
if (msg.message=WM_HOTKEY) and (msg.lParam=MOD_CONTROL) and (msg.wParam=VK_F12) then begin
ShowMessage("Ctrl + F12!");
end;
end;
...
indHK:=GlobalAddAtom("Test");
RegisterHotKey(Applet.Handle,indHK,MOD_CONTROL,VK_F12);
Applet.OnMessage:=TOnMessage(MakeMethod(nil,@OnMess));
...


Vladimir Kladov   (2002-09-06 17:11:00) [15]

Для Applet. И RegisterHotKey( Applet.Handle, ... а не формы.


Kirill   (2002-09-06 10:20:00) [16]

OnMessage для чего? Для формы? Как она получит это сообщение, если она находтся в трее?


Vladimir Kladov   (2002-09-05 22:13:00) [17]

OnMessage, обрабатывать в нем WM_HOTKEY.


pongo   (2002-09-05 19:24:00) [18]

для VCL есть компонент KeySpy, который позволяет отлавливать нажатия клавиш без DLL. Но, в KOL он не работает.

Так же на сем сайте(или на Королевсте Дельфи) были помещены исходники одной программы, где происходило, то, что тебе нужно. но я не смог найти в коде этот участок. вот ссылка:

http://delphi.mtu-net.ru/zip/warp.zip


Kirill   (2002-09-05 11:35:00) [19]

Посмотрел пример
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621065&n=16
или
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621066&n=15
Но при компиляции ругается на директиву message
Unknown directive: "message"


Kirill   (2002-09-05 11:21:00) [20]

Владимир, а как зарегистрировать. Я пробовал, но не знаю как для него определить обработчик.


Страницы:   1 2

Наверх

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