Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрещение Alt + F4


Lord BDV ©   (2002-01-28 20:15:00) 

Приветствую, Мастера.
Подскажите, пожалуйста, как сделать так, чтобы форму моей программы нельзя было закрыть стандартными средствами с клавиатуры (например, такими, как Alt + F4).


Back   (2002-02-01 00:27:00) [1]

Нифига себе, пока меня небыло вы тут такое ..... ТАКОЕ развернули. Я просто предложил, сам так делаю, а вы ???
Давайте смотреть проще


Kirill   (2002-01-31 17:57:00) [2]

Я развил ответ Back"а!
Мой ответ тоже подходит. А какой использовать - выбор автора. :-)


Johnmen   (2002-01-31 17:43:00) [3]

> Kirill : да я не спорю, что так можно и так работает,
я просто говорю, что было Запрещение Alt + F4(см. заголовок вопроса), а это лучше делать см. DeCompiler


Kirill   (2002-01-31 17:32:00) [4]

2Johnmen:
Вы ошиблись. Для наглядности приведу пример:
type
Form1 = class(TForm)
...
mnExit : TMenuItem
...
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(...);
procedure mnExitClick(...);
private
Mona : boolean;
...
end;

procedure Form1.FormCreate(Sender: TObject);
begin
Mona:=false;
end;

procedure Form1.mnExitClick(...);
begin
Mona:=true;
Close;
end;

procedure Form1.FormCloseQuery(...)
begin
CanClose:=Mona;
end;


Johnmen   (2002-01-31 16:54:00) [5]

>Kirill : по-моему, вы ответили на вопрос, как предотвратить закрытие формы по любому, причем еще и заводя переменную Mona,
а изначальный вопрос...
нельзя было закрыть стандартными средствами с клавиатуры (например, такими, как Alt + F4).


Kirill   (2002-01-31 16:32:00) [6]

2Johnmen:
А на что я по-вашему ответил?


Johnmen   (2002-01-31 15:11:00) [7]

>>>kaif : кайфово !!!!!!!!!!!!!!!


kaif   (2002-01-31 15:09:00) [8]

Можно круче:
в OnCloseQuery вписать:
raiseException.Create(
"Кто это тут мою форму пытается закрыть?"+#13+
"Для закрытия формы обратитесь к системному администратору");


Johnmen   (2002-01-31 15:09:00) [9]

>Back & >Kirill & >novomod : мужики, надо же отвечать на поставленныйвопрос !, как это сделал DeCompiler, забыв упомянуть, что Form1.KeyPreview:=True;


novomod   (2002-01-31 14:56:00) [10]

при событии OnCloseQuery пишешь CanClose:=false; и всё!!!


Kirill   (2002-01-29 12:19:00) [11]

Можно без
Application.Terminate;
на событии OnCloseQuery()ставишь CanClose:=Mona;
В обработчике меню или на кнопке где выключаете прогу Mona:=true;


Back   (2002-01-29 00:09:00) [12]

Mona:=Boolean;// типа закроем или нет


procedure Form1.Create()
..
Mona:=False;
..
..

Procedure ()
..
Mona:=True;// тоесть если в данном случае нам уже надо её закрыть
ну можно использовать и такое:
Application.Terminate;
..
..

procedure Form1.Close();
begin
If Mona then Action:=caFree
else Action:=caNone;
end;

ну вот и всё





DeCompiler   (2002-01-29 00:06:00) [13]

На событие OnKeyPress (или OnKeyDown? память никуда :) отлавливай следующее:


if (Key = VK_F4) and (ssAlt in Shift) then
//FuckUP :)
Key := 0;


Впрочем, если очень надо, прогу можно затерминатить из великой комбинации из трех пальцев... Смотри в SystemParametersInfo, дальше параметр SPI_SCREENSAVER_RUNNING...

Успехов.


Наверх

Титульная страница Поиск, карта сайта Написать письмо