Вниз
Скачать: CL | DM;

Перехват ALT+F4   Найти похожие ветки 

← →
pashaz ©   (2004-05-01 12:07) [0]

Всем привет.

Подскажите, как перехватить нажатие клавиш ALT+F4? Нужно на эту комбинацию сделать собственный обработчик.


← →
Jee ©   (2004-05-01 12:24) [1]

OnCloseQuery


← →
begin...end ©   (2004-05-01 12:32) [2]

> [1] Jee ©   (01.05.04 12:24)

Но, с другой стороны, если он будет закрывать окно мышью, может быть, перехват ему не нужен?

> pashaz ©   (01.05.04 12:07)

...

Form1.KeyPreview := True;

...

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if (Key = vk_F4) and (ssAlt in Shift) then
   ShowMessage("Перехват!");
end;


← →
pashaz ©   (2004-05-01 12:41) [3]

Мышью окно закрываться не будет. Нужно перехватить только ALT+F4.


← →
pashaz ©   (2004-05-01 12:43) [4]

Причём фокус в это время может находиться не только на форме, но на любом из компонентов этой формы.


← →
Андрей Сенченко ©   (2004-05-01 12:48) [5]

pashaz ©   (01.05.04 12:43) [4]

Главное чтобы форма бала активна. Фокус неважен.
Вам уже дали решение - [2], только KeyPreview у формы не забудьте в true выставить


← →
begin...end ©   (2004-05-01 12:48) [6]

> pashaz

Ну если мышью не будет закрываться, тогда в обработчик OnCloseQuery ты попадёшь, видимо, только после нажатия Alt-F4. Т.е. тебе должно подойти и [1], и [2].


← →
Андрей Сенченко ©   (2004-05-01 12:53) [7]

begin...end ©   (01.05.04 12:48) [6]

А про обработчик OnCloseQuery вопросов не возникало. Нужно было только перехватить ALT-F4, а уж зачем это автору и что он там собирался писать - его дело.


← →
pashaz ©   (2004-05-01 12:58) [8]

>Андрей Сенченко

Вы совершенно правы. Суть как раз в том, чтобы при нажатии ALT+F4 не возникало OnCloseQuery. Вернее чтобы вообще ничего не происходило.


← →
begin...end ©   (2004-05-01 13:05) [9]

> [7] Андрей Сенченко ©   (01.05.04 12:53)

> А про обработчик OnCloseQuery вопросов не возникало

Я имел в виду, приемлемо ли здесь решение [1].


← →
Андрей Сенченко ©   (2004-05-01 13:16) [10]

pashaz ©   (01.05.04 12:58) [8]

Тогда задача несколько изменяется:
Запретить закрытие формы по ALT-F4

я бы делал так ( пусть меня поправят если что неверно )

implementation

var
 altf4 : boolean;

procedure TFmMain.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (Key = vk_F4) and (ssAlt in Shift) then
 altf4 := true;
end;

procedure TFmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 If altf4
 then
   begin
     CanClose := false;
     altf4 := false;
   end;
end;    


← →
Jee ©   (2004-05-01 13:51) [11]


> Андрей Сенченко ©   (01.05.04 13:16) [10]

Если фокус ввода находится, например, в каком-нибудь TEdit, то вызова TFmMain.FormKeyDown не будет, не так ли?
Думаю нужно копать клубже в сторону оконной процедуры


← →
Jee ©   (2004-05-01 13:53) [12]

Извиняюсь, протормозил. Действительно все нормально. KeyPreview надо включить. :)


← →
DVM ©   (2004-05-01 16:18) [13]

WM_SYSCOMMAND обрабатывайте и делайте там хоть свой обработчик, хоть черта лысого.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.021 c
11-1069017691
Deimos
2003-11-17 00:21
2004.05.16
Как узнать во что переименован файл?


7-1081129575
bear9
2004-04-05 05:46
2004.05.16
Printer и Qreport


6-1080540889
NorthMan
2004-03-29 10:14
2004.05.16
пытаюсь определить IP-адрес подключенного клиента


6-1080475939
iudjen
2004-03-28 16:12
2004.05.16
как скачать файл с интернета


14-1083135450
paul_k
2004-04-28 10:57
2004.05.16
Предлагаю улыбнутся




   Наверх