Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.21;
Скачать: CL | DM;

Вниз

Помогите HOOK CTRL+INS+INS   Найти похожие ветки 

 
Flex ©   (2003-06-18 15:55) [0]

Добрый день уважаемые программисты!

Помогите пожалуйста, мне нужно написать HOOK клавиатуры, который будет отлавливать
комбинацию клавиш Ctrl+INS+INS.

В System tray будет висеть обычный агент, которые должен отлавливать Ctrl+INS+INS

Я так понимаю, что события WM_KEYUP и WM_KEYDOWN будут отлавливаться через WindowProc.

Задача кажеться тривиальной, меня смущает только одно, нет ли более изящного кода, для
подобного рода комбинаций клавиш, когда одна и таже клавиша повторяется несколько раз.

Мой предварительный вариант представлен ниже.
Если есть какие-то рекомендации по реализации подобных вещей, буду очень признателен.


unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
FL:boolean; //Флаг нажатия на клавишу Ctrl+Ins
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview:=True; //Форма будет получать события клавиатуры перед
//активным элементом управления
FL:=False; //инициализация флага
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) then begin
if Key=VK_INSERT then begin
if FL then begin
Showmessage("Ctrl+INS+INS");
FL:=False;
Exit
end; //end FL
FL:=True;
end else FL:=False; //end Key=VK_INSERT
end //end (ssCtrl in Shift)
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not (ssCtrl in Shift) then FL:=False
end;

end.


Заранее благодарен.


 
han_malign ©   (2003-06-18 16:17) [1]

кстати одного FL:=False не хватает (if (ssCtrl in Shift) then)

З.Ы. Можно сократить
if (ssCtrl in Shift)and(Key=VK_INSERT) then begin
( "Ctrl+INS+INS") кстати одного FL:=False не хватает (if (ssCtrl in Shift) then)

З.Ы. Можно сократить
if (ssCtrl in Shift)and(Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
FL:=not FL;
end else FL:=False;


 
Flex ©   (2003-06-18 17:32) [2]


> кстати одного FL:=False не хватает (if (ssCtrl in Shift)
> then)




procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
( ssCtrl in Shift)

> кстати одного FL:=False не хватает (if (ssCtrl in Shift)
> then)




procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
FL:=not FL
end else FL:=False//end (ssCtrl in Shift) and (Key=VK_INSERT)
end;


Где не хватает флага?
Все работает...


 
han_malign ©   (2003-06-18 17:51) [3]

> Где не хватает флага?
if (ssCtrl in Shift) then begin
if Key=VK_INSERT then begin
if FL then begin
Showmessage("Ctrl+INS+INS");
FL:=False;
Exit
end; //end FL
FL:=True;
( ssCtrl in Shift) > Где не хватает флага?
if (ssCtrl in Shift) then begin
if Key=VK_INSERT then begin
if FL then begin
Showmessage("Ctrl+INS+INS");
FL:=False;
Exit
end; //end FL
FL:=True;
end else FL:=False; //end Key=VK_INSERT
end вот здесь//end (ssCtrl in Shift)
:)))
([Ctrl+Ins+Ins] <> [Ctrl+Ins Ctrl+Ins])


 
Flex ©   (2003-06-18 18:24) [4]


> if (ssCtrl in Shift) then begin
> if Key=VK_INSERT then begin
> if FL then begin
> Showmessage("Ctrl+INS+INS");
> FL:=False;
> Exit
> end; //end FL
> FL:=True;
> end else FL:=False; //end Key=VK_INSERT
> end вот здесь//end (ssCtrl in Shift)
> :)))

К данному случаю был код:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not (ssCtrl in Shift) then FL:=False
end;


Хотя последний вариант, намного грамотнее.


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
( ssCtrl in Shift)

> if (ssCtrl in Shift) then begin
> if Key=VK_INSERT then begin
> if FL then begin
> Showmessage("Ctrl+INS+INS");
> FL:=False;
> Exit
> end; //end FL
> FL:=True;
> end else FL:=False; //end Key=VK_INSERT
> end вот здесь//end (ssCtrl in Shift)
> :)))

К данному случаю был код:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if not (ssCtrl in Shift) then FL:=False
end;


Хотя последний вариант, намного грамотнее.


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=VK_INSERT) then begin
if FL then Showmessage("Ctrl+INS+INS");
FL:=not FL
end else FL:=False//end (ssCtrl in Shift) and (Key=VK_INSERT)
end;





Страницы: 1 вся ветка

Текущий архив: 2003.08.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
3-68180
Rustik
2003-07-28 09:39
2003.08.21
Подскажите с вложенным запросом SQL для Paradox


7-68566
hsi
2003-06-06 10:58
2003.08.21
Как получить количество страниц посылаемых на печать???


3-68231
sergg
2003-07-26 17:48
2003.08.21
Файлы таблиц Paradox7


1-68406
The X
2003-08-07 13:28
2003.08.21
Случайное перемешивание данных 1-мерного массива


3-68148
iont
2003-07-25 04:23
2003.08.21
Динамическое создание БД