Форма входа

Категории раздела

Мои файлы [12]
Полезности [15]

Поиск

Наш опрос

Оцените мой сайт
Всего ответов: 62

Статистика


Онлайн всего: 3
Гостей: 3
Пользователей: 0




Понедельник, 25.11.2024, 05:46
Приветствую Вас Гость | RSS

Delphiport.ucoz.com

Главная | Регистрация | Вход
Полезные советы


Главная » Файлы » Полезности

Нажал Escape - закрылась форма.
19.11.2011, 19:49

   Во многих приложениях, часть функций управления посредством мыши, для удобства дублируется в клавиатуре. Скажем клавишу 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%.

А автору респект !!!


Категория: Полезности | Добавил: Sashok
Просмотров: 1259 | Загрузок: 0 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 1
1 SergCes  
0
<a href=http://zmkshop.ru/stati/metallicheskie-konstruktsii/>тексты про металлоконструкции</a>

Имя *:
Email *:
Код *:

Copyright MyCorp © 2024