Закрыть форму по клавише Esc. Как?
Модератор: Модераторы
Закрыть форму по клавише Esc. Как?
Lazarus 0.9. ОС Windows XP SP3.
Как закрыть форму по нажатию клавиши Esc?
Спасибо.
Как закрыть форму по нажатию клавиши Esc?
Спасибо.
устанавливаешь свойство формы KeyPreview := True и создаешь обработчик события onKeyPress из одной строки:
Код: Выделить всё
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""
Почему -- мне не понятно. Ткните носом.
Код: Выделить всё
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""
Почему -- мне не понятно. Ткните носом.
Код: Выделить всё
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( а Вы случаем не главную формы пытаетесь закрыть подобным образом ??? Да нет и в главной форме нет проблем. Чет ниче не ругается
FPC v2.2.4 -- может из-за этого?
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;
Всё получилось.
Спасибо вам, добрые люди.
Спасибо вам, добрые люди.
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.
v-t-l писал(а):И не надо никакой KeyPreview и onKeyPress.
А для главной формы можно так сделать? У меня главная форма закрывается по Esc только, если кнопка Cancel со свойством Cancel=True находится под курсором.
Нет, только если главная форма отображается по ShowModal
.
Если на форме есть ActionList, то можно добавить Action, выставить его ShortCut='Esc', а в обработчике OnExecute написать Close.
Или есть меню, то к пункту "Выход".
Если на форме есть ActionList, то можно добавить Action, выставить его ShortCut='Esc', а в обработчике OnExecute написать Close.
Или есть меню, то к пункту "Выход".
vertu писал(а):устанавливаешь свойство формы KeyPreview := True и создаешь обработчик события onKeyPress из одной строки:Код: Выделить всё
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
if Key = #27 then close;
end;
Если курсор установлен на объекте TMaskEdit, то клавиша Esc не срабатывает. Как побороть?
v-t-l писал(а):Если на форме есть ActionList, то можно добавить Action, выставить его ShortCut='Esc', а в обработчике OnExecute написать Close.
Или есть меню, то к пункту "Выход".
v-t-l писал(а):...добавить Action, выставить его ShortCut='Esc', а в обработчике OnExecute написать Close.
Клавиша Esc не обрабатывается. Также, как не обрабатываются некоторые другие клавиши и комбинации, предложенные по умолчанию.
Пробовал в ShortCut вручную писать Esc, Escape. Пробовал захватывать клавишу стандартными средствами. Не обрабатывается, хоть застрелись.
