Jun 14

Закрытие окна

При необходимости закрытия окна, если вы нажмете на  кнопку Escape, то закроется "вторичное" окно программы, а вовсе не самое главное. К примеру, для ввода значений... В большиистве данных случаев на таких окнах есть кнопка "Отмена" либо аналогичные, по которым  окно и закрывается. У компонента под названием TButtonCancel, надо которое устанавливать в True. После нажатия на Escape теперь выполнится onClick данной  кнопки.

Если же по событию onClick сделать закрытие формы, то и при нажатии на Escape, форма будет выполнять то же действие.

А что же делать в случаи когда вообще нет никаких кнопок и необходимо просто окно закрыть нажатием  Escape?  Для этого нам создать нужно обработчик события OnKeyPress:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#27 then close;
end;

key - представляет собой код нажатой клавиши. А код самой клавиши Escape = цифра 27.

П.С. Желаете скачать качественную и главное бесплатную программу для легкой работы с файлами формата PDF? Предлагаю вам с этой целью скачать прогу Acrobat Reader скачать на ресурсе format-pdf.com, кторая откроет перед вами новые возможности!


  1. Чорны кашак
     Add karma Subtract karma  +1
    Цитировать.

    При этом KeyPreview у формы надо выставить в True, а то ваш #27 не дойдет до формы и будет обработан активным контролом

    1
  2. admin
     Add karma Subtract karma  +0
    Цитировать.
    Комментарий автора

    Да, совершенно верно…

    2
  3. Алексей Тимохин
     Add karma Subtract karma  +1
    Цитировать.

    Вместо волшеьной цифра 27 лучше использовать константу VK_ESC.

    3
  4. admin
     Add karma Subtract karma  +0
    Цитировать.
    Комментарий автора

    Ну это уже кому что ближе по душе)

    4
  5. Sergey
     Add karma Subtract karma  +0
    Цитировать.

    Нужно использовать не FormKeyPress, а FormShortCut!

    5
  6. sw
     Add karma Subtract karma  +1
    Цитировать.

    А хотите я вас разочарую?
    Есть ряд контролов, которые умеют обрабатывать Escape и другие “диалоговые” кнопки, если есть в этом контекстная необходимость. Например, если на форме есть комбобокс, и комбобокс находится в дропнутом режиме, то нажимая на Escape пользователь будет думать, что закроется комбобокс (т.е. произойдёт отмена выбора значения в комбобоксе). Если у вас на диалоговой форме есть кнопка со свойством Cancel = True, то всё отработает корректно – при первом нажатии на Escape закроется комбобокс, при втором нажатии – отработает обработчик кнопки (т.е. проставится ModalResult кнопки в форму).

    Ежели обрабатывать FormKeyPress так, как предлагает автор поста – пользователь обламается…

    6
  7. ХОТ
     Add karma Subtract karma  +0
    Цитировать.

    Раньше активно пользовался тем вариантом что приведен автором

    7

Поделитесь вашими мыслями

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>