рус | укр

Главная

Контакты

Навигация:
Арсенал
Болезни
Витамины
Вода
Вредители
Декор
Другое
Животные
Защита
Комнатные растения
Кулинария
Мода
Народная медицина
Огород
Полесадник
Почва
Растения
Садоводство
Строительство
Теплицы
Термины
Участок
Фото и дизайн
Хранение урожая









Автоматическая передача фокуса очередному компоненту при нажатии пользователем клавиши Enter.

Это можно сделать, обрабатывая событие нажатия клавиши OnKeyDown, двумя способами.

1. 1. Ввести во все окна операторы передающие фокус, обеспечивая требуемую последовательность действий

Например, после ввода данных в окно Edit1 необходимо переключиться в окно Edit2

procedure TForm1.Edit1KeyDown (Sender: TObject; var Key: Word; Shift: TShiftState);

begin

if (Key = VK_RETURN) then Edit2.SetFocus;

end;

2. 2. Использовать единый обработчик событий OnKeyDown для различных окон (для различных кнопок - обработчик события OnClick).

Для этого воспользоваться методом FindNextControl,который возвращает очередной компонент в последовательности табуляции.

Метод определен следующим образом:

FindNextControl (CurControl: TWinControl; GoForward, CheckTabStop,

CheckParent : boolean) : TWinControl;

Возвращает следующий за указанным в параметре CurControl дочерний оконный компонент в соответствии с последовательностью табуляции.

Здесь GoForward определяет направление поиска (True - вперед).

Параметры CheckTabStop, CheckParent определяют условия поиска:

если CheckTabStop=true, то просматриваются компоненты, у которых TabStop=True,

если CheckTabStop=false, то значение TabStop не принимается во внимание

если CheckParent =true, то просматриваются только прямые потомки

если CheckParent =false, то просматриваются все (и косвенные)потомки данного элемента

Итак, чтобы автоматически передавать фокус при нажатии клавиши Enter следует написать единый обработчик событий OnKeyDown для всех оконных компонентов, содержащий оператор

if (Key = VK_RETURN)

then FindNextControl (Sender as TWinControl, true, true, false).SetFocus;

Этот оператор обеспечивает передачу фокуса очередному компоненту.

Для кнопок в обработчик события OnClick следует вставить оператор

FindNextControl (Sender as TWinControl, true, true, false).SetFocus;

Заголовок обработчика событияOnKeyUp имеет такой же вид как и OnKeyDown, так что все сказанное в равной степени относится и к событиям при отпускании клавиш.

 

Рассмотрим событиеOnKeyPress. Заголовок обработчика этого события имеет вид:

procedure (Sender: TObject; var Key: Char);

В этот обработчик также передается пapаметрKey, определяющий нажатую клавишу символа.

!Но тип этого параметра не целое число, aChar.

В данном случае в обработчик передается не виртуальный код клавиши, а символ, по которому можно определить, прописная это буква, или строчная, рус­ская, или латинская.

Пусть, например, вы задали пользователю вопрос, на который он должен ответить символами “Д” или “д” (да), или символами “Н” или <н” (нет). Тогда распознать положительный ответ в обработчике событияOnKeyPress можно оператором: 1

if ((Key = 'Д') or (Key = 'д')) then ...

Или короче, воспользовавшись oперациейin:if (Key in ['Д', 'д']) then ...;

Приведенные операторы реагируют только на положительный ответ пользователя, не реагируя на отрицательный или ошибочный ответ.

Реакцию на все возможные ответы обеспечивает структураcase:

case Key of

‘Д','д': ...;

‘Н',’н': ...;

else Beep;

end;

Здесь предусмотрена реакция на положительный и отрицате­льный ответ, а также звуковой сигнал при ошибочном ответе.

ПараметрKey передается какvar. Это позво­ляет в обработчике изменять этот параметр, изменяя соответст­венно его стандартную обработку в компоненте, поскольку ваш об­работчик события срабатывает раньше стандартного обработчика компонента.

Пусть, например, вы хотите иметь на форме окно ре­дактирования Edit1, в котором пользователь должен вводить толь­ко целые числа без знака, разделенные запятыми или пробелами. Вы можете обеспечить безошибочный ввод, подменяя все недопус­тимые символы нулевым с помощью, например, такого оператора:

if not (Key in ['0'..'9',' ' , ', ']) then Key := #0;

При нажатии пользователем любой клавиши, кроме клавиш с цифрой, запятой или пробелом, символы подменяются нулевым символом и просто не появляются в окне редактирования. Можно добавить в обработчик звуковой сигнал при нажатии пользователем ошибочной клавиши:

if not (Key in ['0'..'9',' ', ',']) then

begin

Key := #0;

Beep;

end;

 

Просмотров: 271

Вернуться в категорию: Строительство

© 2013-2017 cozyhomestead.ru - При использовании материала "Удобная усадьба", должна быть "живая" ссылка на cozyhomestead.ru.