![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать форму всегда
greenrul © (2002-02-24 14:55:00)Есть компонент, который ПРЕКРАСНО"ловит" нажатия нужных клавиш - стоит форму в трей отправить, он уже ниче не ловит 8( P*L*E*A*S*E H*E*L*P
copyr25 (2002-02-25 12:49:00) [1]greengul: Не проще. Попробуйте Ваш тройной if. Close не получится, когда нажимаются
клавиши...
greenrul (2002-02-25 12:17:00) [2]2Deus - на самом деле компонента фиговая - проще через WinAPI.
там надо мучаться с переводом из VirtualKeyCode в норм. стринг, м нельзя проверить, ккакие клавишы еще зажаты
greenrul (2002-02-25 11:39:00) [3]Жалко что сторонние компоненты приходится юзать.
соpyr25 - вы правы, смеятьля можно долго 8)
а не проще вместо
if Msg.HotKey = XKey then i:=1;
if (Msg.HotKey = YKey) and (i=1) then i:=2;
if (Msg.HotKey = ZKey) and (i=2) then Close;
написать
if (Msg.HotKey = XKey) and (Msg.HotKey = YKey) and (Msg.HotKey = ZKey) then Close;
Deus (2002-02-24 19:04:00) [4]Думаю, Вам тоже нужны хуки:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1014485066&n=0
copyr25 (2002-02-24 18:30:00) [5]Ну, например так: на последовательное нажатие F1+F2+F3.
Можно смеяться сколько угодно, но ведь работает:)))
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Forms,
ExtCtrls, StdCtrls;
const
XKey = 101; YKey=102; ZKey = 103;
type
TForm1 = class(TForm)
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; i: byte;
implementation
{$R *.DFM}
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if Msg.HotKey = XKey then i:=1;
if (Msg.HotKey = YKey) and (i=1) then i:=2;
if (Msg.HotKey = ZKey) and (i=2) then Close;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
i:=0;
RegisterHotKey(Handle, XKey, 0, VK_F1);
RegisterHotKey(Handle, YKey, 0, VK_F2);
RegisterHotKey(Handle, ZKey, 0, VK_F3);
end;
end.
greenrul (2002-02-24 17:23:00) [6]А Комбинации всеравно не обрабатывает -
RegisterHotKey(Handle, 101, 0, VK_CONTROL+Ord("A"));
нет реакции, а вот если отдельно -
RegisterHotKey(Handle, 101, 0, Ord("A"));
RegisterHotKey(Handle, 101, 0, VK_CONTROL);
greenrul (2002-02-24 17:12:00) [7]у меня вопрос - а как строчку типа Ctrl+Alt+C в VK_* и пр. преобразовать?
greenrul (2002-02-24 17:09:00) [8]Усе, понял - типа идентификатор для каждого Хука (а не для клавиши)
greenrul (2002-02-24 17:05:00) [9]А почему 101, 102и что вообще эти целые числа значят?
copyr25 (2002-02-24 16:32:00) [10]А зачем компонент?
Сами зарегистрируйте свои нужные клавиши.
const
XKey = 101; YKey=102;
type
TForm1 = class(TForm)
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
procedure FormActivate(Sender: TObject);
...
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if Msg.HotKey = XKey then чего-то делаем;
if Msg.HotKey = YKey then чего-то делаем;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
RegisterHotKey(Handle, XKey, 0, VK_RETURN);
RegisterHotKey(Handle, YKey, 0, VK_SPACE);
// ну, например:)
end;