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

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

Как сделать форму всегда


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;


Наверх

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