|
Автоматическая передача фокуса очередному компоненту при нажатии пользователем клавиши 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;
Просмотров: 758 Вернуться в категорию: Строительство |
© 2013-2021 cozyhomestead.ru - При использовании материала "Удобная усадьба", должна быть "живая" ссылка на cozyhomestead.ru.
|