Форум: "Основная";
Текущий архив: 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