Главная страница
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.046 c
1-1083055701
DiEgo
2004-04-27 12:48
2004.05.16
Как сделать ToolBar


6-1080543470
Sodom
2004-03-29 10:57
2004.05.16
Upload файла на сервер через PHP-скрипт


1-1083397320
k@rt
2004-05-01 11:42
2004.05.16
TDCMemo


3-1082189901
Alexey3117
2004-04-17 12:18
2004.05.16
Нужна БД "СКЛАД" на Interbase


6-1080421878
Rezya
2004-03-28 00:11
2004.05.16
Перевод Простого сокета в режим перехвата всего трафика