Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.024 c
6-1079716680
rulezz
2004-03-19 20:18
2004.05.16
Delphi + indy + post


1-1083336754
siriusP
2004-04-30 18:52
2004.05.16
Hint для ComboBox ???


14-1082668386
тихий вовочка
2004-04-23 01:13
2004.05.16
Как заполучить файлы?


14-1083006156
ЧупаЧупс
2004-04-26 23:02
2004.05.16
Оформление


1-1083318602
cf
2004-04-30 13:50
2004.05.16
буфер обмена