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

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

RegisterHotKey [D6, WinXP]


Lucifer ©   (2005-01-22 12:35:00) 

Начну сразу с кода, при его компиляции никаких ошибок нет, но при нажатии СНТР+Ф7, заданного события не происходит!!, в чём ошибка??
Заранее благодарен!!
Пример демонстрирует установку горячей клавиши CTRL-F7:

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;

type
 TForm1 = class(TForm)
   procedure FormActivate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;
 end;

var
 Form1: TForm1;
implementation

{$R *.DFM}
procedure Tform1.WMHotKey(var Message: TMessage);
begin
 application.Restore;
 application.bringtofront;
 showmessage('Нажата CTRL-F7!');
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 RegisterHotKey(form1.Handle,123,mod_control,vk_f7);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnregisterHotKey(Handle, 123)
end;

end.


GuAV   (2005-01-26 00:09:00) [1]

Lucifer ©   (25.01.05 19:19) [7]
Самое простое - обработчик OnActivate не назначен :-)

Вообще см [4] внизу.


Lucifer   (2005-01-25 19:19:00) [2]

Блин, люди, ВСЁ перепробовал, любые комбинации клавишь делал, ничего не работает! (А у других пашет??) Я у себя на двух машинах пробовал, не работает!


Просто Джо   (2005-01-23 03:21:00) [3]

GuAV ©   (22.01.05 13:01) [2]
1. Скорее всего, CTRL-F7 уже назначена как хоткей другим приложением.


Ага. Watch List в IDE Delphi, например ;)


i-s-v   (2005-01-23 01:32:00) [4]

После себя убирать надо: после

> UnregisterHotKey(Form1.Handle, d_hide)

GlobalDeleteAtom(d_hide); //:)

А тута:

> d_hide := GlobalAddAtom('d_hide');
>  RegisterHotKey(Form1.Handle, d_hide, 0, VK_F10)

лучше не 'd_hide', а нажать Ctrl+Shift+G...

---
The Death Will Come


Digitman   (2005-01-22 14:39:00) [5]


> Дак тогда должно, что-то происходить по нажатию, а тут вообще
> ничего не происходит!!


а с чего ты взял, что что-то обязательно должно визуально происходить ? мало ли как другое приложение обрабатывает это событие ! может оно просто фиксирует сам факт его возникновения и более ничего не делает ..

а вообще говоря RegisterHotKey() - это ф-ция, и она возвращает опред.результат, анализ которого как раз и дастт детальную инф-цию о том , успешен ли вызов, и если не успешен, то по какой конкретно причине


Lucifer   (2005-01-22 13:06:00) [6]

1. Скорее всего, CTRL-F7 уже назначена как хоткей другим приложением.
Дак тогда должно, что-то происходить по нажатию, а тут вообще ничего не происходит!!


GuAV   (2005-01-22 13:01:00) [7]

Lucifer ©   (22.01.05 12:35)

У меня работает.

1. Скорее всего, CTRL-F7 уже назначена как хоткей другим приложением.
2. TForm.OnActivate не лучшее место для инициализации, лучше TForm.OnCreate


tradakad   (2005-01-22 12:56:00) [8]

poprobui eto. u menya rabotaet
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   procedure RD_Hide(var mess: TWMHotKey); message WM_HOTKEY;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 d_hide: LongWord;

implementation

{$R *.dfm}

procedure TForm1.RD_Hide;
var
 wnd: HWND;
 buff: array [0..127] of Char;  
begin
 if mess.HotKey <> 49227 then Exit;
 Wnd := GetWindow(Handle, gw_HWndFirst);
 while Wnd <> 0 do
 begin
   if (Wnd <> Application.Handle) and
      (GetWindow(Wnd, gw_Owner) = 0) and
      (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
   begin
     GetWindowText(Wnd, buff, sizeof(buff));
     if Pos('Удаленный рабочий стол', buff) <> 0 then
     begin
       if IsWindowVisible(Wnd) then ShowWindow(Wnd, SW_HIDE) else ShowWindow(Wnd, SW_NORMAL)
     end
   end;
   Wnd := GetWindow(Wnd, gw_hWndNext)
 end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 d_hide := GlobalAddAtom('d_hide');
 RegisterHotKey(Form1.Handle, d_hide, 0, VK_F10)
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnregisterHotKey(Form1.Handle, d_hide)
end;

end.


Наверх

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