Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Перехват 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
1-1083323415
АЛЛАМИТ
2004-04-30 15:10
2004.05.16
MDI приложение


8-1077474036
Push
2004-02-22 21:20
2004.05.16
Звук с модема


14-1083088168
Hawk2
2004-04-27 21:49
2004.05.16
Анимашки


14-1081866686
Maxim Vetera
2004-04-13 18:31
2004.05.16
К вопросу о матрице ...


1-1083128507
din
2004-04-28 09:01
2004.05.16
Lookup в гриде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский