| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Как создать событие на клавишу ESC? |
| Автор: Rusman 19.7.2008, 11:14 |
| Подскажите пожалуйста как создать событие на ESC? Спасибо! |
| Автор: VICTAR 19.7.2008, 11:29 | ||
|
| Автор: Rusman 19.7.2008, 11:36 | ||||
Странно, но не рботает |
| Автор: VICTAR 19.7.2008, 11:49 | ||
На форме наверное есть элементы, которые отбирают фокус
|
| Автор: Rusman 20.7.2008, 11:24 |
| Ага, сделал так, но проблема решена не полностью. Вот я вызываю из главное формы форму, потом нажимаю ESC у меня закрывается, потом снова вызываю эту же форму но уже при нажатии ESC она не закрывается, только после перезапуска программы. |
| Автор: VICTAR 20.7.2008, 15:22 |
| Посмотри аттач. Закрывается и с первого, и второго, и со сто двадцать пятого |
| Автор: pseud 22.7.2008, 12:26 | ||||
кидаешь на форму кнопку TButton и выстваляешь ей свойство
а в событии OnClick:
|
| Автор: Olegan 22.7.2008, 14:17 | ||
а так? |
| Автор: Alexzz 23.7.2008, 14:04 | ||||
Меня заинтересовала одна строчка в твоём коде:
Правильно ли я понял, что это свойство установленное в True позволяет событиям основной формы проверять коды нажатых клавиш прежде чем любой другой объект на форме? Собственно я как раз ищу такой способ, так как тоже столкнулся с перехватом фокуса другими объектами и сложностями с обработкой глобальных клавиш, которые должны выполняться независимо от того, где на форме находится фокус. |
| Автор: VICTAR 23.7.2008, 14:10 | ||||
да
PS это свойство можно выставить в инспекторе объектов. В примере так сделано "чтобы заметили" =) |
| Автор: pseud 23.7.2008, 15:43 | ||
| интересно кто мне такой боольшой минус 3 поставил? и за что? отзовись... мануал гласит:
естественно это не подходит для окна_без_кнопок |
| Автор: hunterpro 6.8.2008, 20:28 |
| вот же лосось даже у меня работает!!!! ))))) |
| Автор: Poseidon 7.8.2008, 00:44 |
| pseud, ставил не я, но я тебе обьясню за что. Да, можно кинуть кнопку. Да, можно сделать ее невидимой и тогда можно добиться эфекта окна_без_кнопок. Но программисту будет видна эта кнопка в design-time. А смысл ее будет только в том, что бы закрыть форму. Грубо говоря - это извращения. Раньше я встречал ответы типо "Кинь Memo, сделай Memo.Visible:= False и делай в нем все, что хочешь." Твой ответ с той же оперы. Кинув первый взгляд на такие ответы создается впечатление непрофессиональности автора. Увидев подобный проект... Ведь если тебе нужна таблица с фиксированным количеством столбцов и строк, ты ведь не будешь ее делать при помощи несколькиз едитов, а воспользуешься гридом. Так и тут, зачем для закрытия формы использовать кнопку, если можно сделать все средствами самой формы? По меньшей мере это не логично. |
| Автор: pseud 7.8.2008, 09:00 | ||
| Poseidon, я не предлагал сделать кнопку невидимой. сам такое не признаю. но если у меня модальная форма (простая_сущность, настройки, о_программе, логин, и пр.), то там почти всегда есть кнопки ОК-Отмена. которым я немедля в дизайне выставляю:
и в итоге больше ничего прописывать не надо. окно само закрывается по Esc с возвратом mrCancel. если форма немодальная и на ней есть кнопка Отмена, то ей в обработчик пишу Close. не я выдумал этот механизм, а Borland. переубеди меня если я не прав, или опять: |
| Автор: Poseidon 7.8.2008, 12:14 |
| pseud, перечитай первый пост. Во-первых, там ни слово про модальность. Во-вторых, там просят не закрыть форму по ESC, а создать событие. Вдруг нужно язык интерфейса сменить? А выставивь Cancel в True, ты будешь отлавливать ESC кнопкой, чего делать не просят. |
| Автор: THandle 7.8.2008, 12:33 |
| pseud, минус сообщению поставил я, по перечисленным Посейдоном причинам. |
| Автор: pseud 7.8.2008, 12:36 | ||
| Poseidon, THandle, в продолжение пост автора вопроса:
т.е. я понял верно. закрытие окна по Esc |
| Автор: pseud 7.8.2008, 13:33 |
| вобщем, как обычно - спор низачем. без автора не разрулить. |
| Автор: mr.Anderson 10.8.2008, 17:47 | ||
Насторожила вот эта вещь:
Создается впечатление, что цель всех этих шаманств - это закрыть диалоговое окно по нажатию Esc. Тогда вы зря наезжаете на pseud, он все говорит верно, в любой диалоговой форме должны быть кнопки "ОК" и "Отмена", причем на отмену обычно устанавливают Cancel = True (ну и обычно еще modalResult = mrCancel) и все на том. |