Во многих приложениях, часть функций управления посредством мыши, для удобства дублируется в клавиатуре. Скажем клавишу Insert, - ставят в соответствие с функцией добавления строк в таблице, клавиша Delete, - обычно ассоциируется с удалением чего бы то ни было, а клавиши навигации соответственно для перемещения области выделения объктов на форме, или курсора - по полям для ввода текста. Мы же рассмотрим
на мой взгляд
наиболее востребованную фишку - "закрытие формы по нажатию клавиши Esc"; Существует ряд вариантов реализации такого действа. Чаще всего встречается вот такой метод:
1) Свойство KeyPreview формы выставляется в true, создается обработчик событий OnKeyPress на форме и прописывается следующий код:
begin
if Key = #27 then Close; end;
Данный код, в полне рабочий, но не совсем корректен и убедиться в этом можно достаточно просто. Помещаем ко всему прочему на форму, скажем MaskEdit, запускаем наше приложение, нажимаем клавишу Esc и вуаля, форма наша не закрывается должным образом. Интересное решение проблемы, я нашел на сайте delphinotes.ru. Автор рассматривает решение проблемы путем обработки диалоговых клавиш сообщением CMDialogKey. CMDialogKey
- специально предназначен для подобных мероприятий. В общем, ближе к делу: 1) Создаем новый проект; 2) В редакторе кода записываем следующую процедуру:
procedure TForm1.CMDialogKey(var Message: TCMDialogKey);
begin
with Message do
if (CharCode=VK_ESCAPE) and (KeyDataToShiftState(KeyData)=[]) then // Если нажата Esc и сдвиговые клавиши (Shift, Ctrl, Alt) не зажаты тогда:
begin if fsModal in FormState then // Если присутствует модальное окно; begin ModalResult := mrCancel;
// Закрытие модального окна;
Result := 1; end else Result := Integer(PostMessage(Handle, WM_CLOSE, 0, 0)); // Если нет, закрываем основное; if Result <> 0 then Exit;
end; inherited;
end;
3) В разделе private прописываем две строчки: procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY; 4) Помещаем на форму любые компоненты, связываем их как угодно, запускаем проект, нажимаем наш многострадальный Esc и ... вуаля!!! Наш код работает на все 100%.
А автору респект !!!
|