Страница 1 из 1
Закрыть форму по клавише Esc. Как?
Добавлено: 16.04.2010 10:22:33
KOL48
Lazarus 0.9. ОС Windows XP SP3.
Как закрыть форму по нажатию клавиши Esc?
Спасибо.
очень просто :)
Добавлено: 16.04.2010 11:15:48
vertu
устанавливаешь свойство формы KeyPreview := True и создаешь обработчик события onKeyPress из одной строки:
Код: Выделить всё
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
if Key = #27 then close;
end;
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 16.04.2010 13:28:16
KOL48
Да, этот совет я уже видел где-то. Только почему-то не срабатывает. Делал так:
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
begin
KeyPreview := True;
end;
procedure TForm1.FormKeyPress
(Sender: TObject; var Key: Char) ;
begin
if key = #27 then Close;
end;
На строку
(Sender: TObject; var Key: Char) ;
компилятор ругается так: "unit1.pas(91,1) Error: method identifier expected"
На строку
if key = #27 then Close;
компилятор ругается так: "unit1.pas(93,22) Error: Wrong number of parameters specified for call to "Close""
Почему -- мне не понятно. Ткните носом.
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 16.04.2010 15:12:12
amateur
Код: Выделить всё
procedure TForm2.FormKeyPress(Sender: TObject; var Key: char);
begin
if Key = #27 then close;
end;
Вторая форма диалоговое окно (автосоздаваемое). В первой форме кнопка и обработчик:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
В винде работает... (KeyPreview := True; установил в форме 2 в дизайнере). Лазарь 0.9.29 ФПС 2.5.1
Кстати
"unit1.pas( а Вы случаем не главную формы пытаетесь закрыть подобным образом ??? Да нет и в главной форме нет проблем. Чет ниче не ругается

Re: Закрыть форму по клавише Esc. Как?
Добавлено: 16.04.2010 15:37:04
KOL48
FPC v2.2.4 -- может из-за этого?
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 16.04.2010 15:44:15
скалогрыз
KOL48 писал(а):Почему -- мне не понятно. Ткните носом.
а в интерфейсе класса TForm1 эти методы описаны?!
а связка в Event-ах есть ли?
Код: Выделить всё
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender:TObject);
procedure FormKeyPress(Sender:TObject;var Key:char);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender:TObject);
begin
KeyPreview:=True;
end;
procedure TForm1.FormKeyPress(Sender:TObject;var Key:char);
begin
if Key=#27 then Close;
end;
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 16.04.2010 16:05:08
KOL48
Всё получилось.
Спасибо вам, добрые люди.
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 16.04.2010 17:21:26
v-t-l
amateur писал(а):Вторая форма диалоговое окно (автосоздаваемое). В первой форме кнопка и обработчик:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
Если на Form2 есть кнопка "Отмена", то выставить ее свойства Cancel=True, ModalResult=mrCancel,
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
if Form2.ShowModal=mrCancel then Exit;
...
end;
И не надо никакой KeyPreview и onKeyPress.
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 19.04.2010 09:38:49
KOL48
v-t-l писал(а):И не надо никакой KeyPreview и onKeyPress.
А для главной формы можно так сделать? У меня главная форма закрывается по Esc только, если кнопка Cancel со свойством Cancel=True находится под курсором.
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 19.04.2010 11:02:44
v-t-l
Нет, только если главная форма отображается по ShowModal

.
Если на форме есть ActionList, то можно добавить Action, выставить его ShortCut='Esc', а в обработчике OnExecute написать Close.
Или есть меню, то к пункту "Выход".
Re: очень просто :)
Добавлено: 19.04.2010 14:47:27
KOL48
vertu писал(а):устанавливаешь свойство формы KeyPreview := True и создаешь обработчик события onKeyPress из одной строки:
Код: Выделить всё
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
if Key = #27 then close;
end;
Если курсор установлен на объекте TMaskEdit, то клавиша Esc не срабатывает. Как побороть?
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 19.04.2010 16:46:03
v-t-l
v-t-l писал(а):Если на форме есть ActionList, то можно добавить Action, выставить его ShortCut='Esc', а в обработчике OnExecute написать Close.
Или есть меню, то к пункту "Выход".
Re: Закрыть форму по клавише Esc. Как?
Добавлено: 03.06.2010 16:44:09
KOL48
v-t-l писал(а):...добавить Action, выставить его ShortCut='Esc', а в обработчике OnExecute написать Close.
Клавиша Esc не обрабатывается. Также, как не обрабатываются некоторые другие клавиши и комбинации, предложенные по умолчанию.
Пробовал в ShortCut вручную писать Esc, Escape. Пробовал захватывать клавишу стандартными средствами. Не обрабатывается, хоть застрелись.