Как при закрытие формы, можно узнать на какую пользователь нажел клавишу. Я заполняю переменую при нажатие каждой кнопки. При закрытие проверяю эту переменую. Но мне кажеться есть способо более элегантный.
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
>>> Как при закрытие формы, можно узнать на какую пользователь нажел клавишу.
Владимир Метальников:
>>> Будем исходить из предположения, что все-таки "кнопку".
Я, в свою очередь, выскажу предположение, что, всё-таки, нужна и не клавиша, и не кнопка, а "команда", по которой произошёл выход. Обычно это Ok и Cancel. Причём выход по одной "команде" может быть осуществлён разными способами. Например, выход по команде "Отмена" может быть осуществлён:
1. Кликом по своей кнопке "Отмена".
2. Нажатием клавиши Enter или Пробел, когда текущей является своя кнопка "Отмена.
3. Часто - нажатием клавиши Esc.
4. Кликом по кнопке с крестиком на заголовке формы.
5. Нажатием клавиш Alt-F4.
6. Через пункт "Закрыть" системного меню, если оно есть...
Я думаю, вряд ли интересно, каким именно образом закрыли форму. Главное - знать: по OK или по Cancel...
Форма может отображаться либо в модальном режиме (по ShowModal), либо в немодальном (по Show). В немодальном режиме - по Show форма отображается и программа продолжает выполненяться дальше. При отображении формы в модальном режиме программа входит внутрь ShowModal и не выходит из неё до тех пор, пока не будет закрыта форма. Диалоги, имеющие кнопки "Ok" и "Cancel", обычно отображаются в модальном режиме.
Форма имеет такое полезное свойство, как ModalResult...
Свойство - это такая штука, которая снаружи выглядит как переменная, но при её чтении или присвоении могут выполняться дополнительные действия...
Свойство ModalResult имеет тип TModalResult (см. help), который в конце концов, является Integer'ом. Для использования с ModalResult определено несколько констант, которыми и следует пользоваться (mrNone, mrOk, mrCancel и др.). При отображении формы в модальном режимеModalResult устанавливается в mrNone. При присвоении ModalResult любого значения, отличного от mrNone, форма закрывается и по значению ModalResult можно узнать, по какой команде произошло закрытие формы.
Присвоить это значение можно любым удобным способом, например, в обработчике OnClick кнопки. Однако есть более удобный способ. Кнопки тоже имеют свойство ModalResult. В кнопках это свойство выполняет следующую задачу: при клике по кнопке автоматически происходит присвоение значения ModalResult кнопки свойству ModalResult формы, на которой она лежит. Таким образом, присвоив в инспекторе объектов свойству ModalResult кнопки любого значения, отличного от mrNone, мы обеспечим закрытие формы при клике на этой кнопке без всяких обработчиков. При любых видах отмены, предусмотренных в системе, ModalResult формы принимает значение mrCancel, поэтому своей кнопке "Отмена" также удобно присвивать mrCancel. Кнопке "Ok" вполне логично присвоить значение mrOk... Также у кнопок есть свойства Default и Cаncel. При установке Default в True, эта кнопка будет срабатывать при нажатии Enter в любом месте формы (если это нажатие не обрабатывается кем-то другим). При установке Cаncel в True, эта кнопка будет срабатывать при нажатии Esc в любом месте формы (если это нажатие также не обрабатывается кем-то другим). При отображении формы в немодальном режимеModalResult ни на что не реагирует и его можно использовать как обычную переменную, присваивая ему те-же значения, что и в модальном режиме, но после этого закрывая форму явным вызовом метода Close.
P.S. Работающий пример, демонстрирующий применение вышеописанной методики, можно посмотреть здесь: »вопрос КС №49724«
Как при закрытие формы, можно узнать на какую пользователь нажел клавишу.
Я заполняю переменую при нажатие каждой кнопки
Все-таки: "клавишу" или "кнопку" ? Это не совсем одно и то же :-)
Будем исходить из предположения, что все-таки "кнопку".
Если надо в момент закрытия проверять, какой элемент управления имел фокус,
то надо воспользоваться свойством ActiveControl формы. Только не будет работать,
если кнопки - SpeedButton, потому что этот элемент фокуса управления не получает.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.