Рассмотрим некоторые типовые задачи, которые нередко приходится решать при использовании однострочных окон редактирования.

Часто в приложении имеются окна редактирования, которые пользователь должен поочередно заполнить. Вместо того чтобы переключаться от одного окна к другому с помощью мыши или клавиши Tab, пользователю удобнее, если при окончании набора текста в одном окне и нажатии клавиши Enter фокус автоматически передастся другому окну. Это можно реализовать, написав единый обработчик событий OnKeyDown всех интересующих вас оконных компонентов, содержащий оператор:

if (Key = VK_RETURN)

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

В этом операторе используется функция FindNextControl, возвращающая следующий в последовательности табуляции дочерний компонент. Если компонент, имеющий в данный момент фокус, является последним в последовательности табуляции, то возвращается первый компонент этой последовательности. Функция определена следующим образом:

function FindNextControl(CurControl: TWinControl;
GoForward, CheckTabStop, CheckParent: Boolean): TWinControl;

Она находит и возвращает следующий за указанным в параметре CurControl дочерний оконный компонент в соответствии с последовательностью табуляции. Параметр GoForward определяет направление поиска. Если он равен true, то поиск проводится вперед и возвращается компонент, следующий за CurControl. Если же параметр GoForward равен false, то возвращается предшествующий компонент.

Параметры CheckTabStop и CheckParent определяют условия поиска. Если CheckTabStop равен true, то просматриваются только компоненты, в которых свойство TabStop установлено в true. При CheckTabStop равном false значение Tab Stop не принимается во внимание. Если параметр CheckParent равен true, то просматриваются только компоненты, в свойстве Parent которых указан данный оконный элемент, т.е. просматриваются только прямые потомки. Если CheckParent равен false, то просматриваются все, даже косвенные потомки данного элемента.

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

if (Key in [Char (33) ..Char (182)]) and (Key <> '-') then begin

Key := #0;
Beep;
end;

В этом операторе все символы, коды которых лежат в диапазоне 33-182, кроме кода символа подменяются нулевым символом. Все символы, лежащие в указанном диапазоне, недопустимы при вводе фамилии. Подмена их нулевым символом приводит к тому, что в окне редактирования ничего не отобразится. А функция Веер подает звуковой сигнал при нажатии ошибочной клавиши.

Полезно также для подобного окна предусмотреть принудительную установку русского языка. Это делается (см. разд. 12.2.4) оператором


|Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Май
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс