Переключение фокуса между полями по нажатию Enter

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
shplint
топ-софт
Сообщения: 14
Зарегистрирован: Вт, 05/05/2009 07:47
Имя Фамилия: Виктор Носов
Откуда: Галактика-Урал

Переключение фокуса между полями по нажатию Enter

Сообщение shplint »

Здравствуйте!

Есть интерфейс с несколькими полями (2 поля выбора даты для фильтра ), фокус между ними переключается по Tab или мышкой, что не очень удобно. При нажатии Enter интерфейс закрывается.

Как сделать так, чтобы если фокус находится в первом поле, то по Enter-у фокус переходил во второе поле, если во втором поле - то срабатывал бы cmOK?
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

1. Из описания интерфейса убрать DoAccept.
2. В cmDefault определять какое поле текущее и выполнять определенные действия.
shplint
топ-софт
Сообщения: 14
Зарегистрирован: Вт, 05/05/2009 07:47
Имя Фамилия: Виктор Носов
Откуда: Галактика-Урал

Сообщение shplint »

А как установить курсор на нужное поле? В мануале нашел функцию SelectField(), но что-то она не отрабатывает.
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

SelectField(#FieldName) работает, но капризна.
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

Что-то в потоке команд сбивает. Вот так работает:

Код: Выделить всё

Interface TestSelect;

Create View
Var 
  dBeg
, dEnd 
            : date;

As Select
   *
From 
  x$users
;

Screen scr1;
  table x$users;
Fields
  dBeg, noProtect;
  dEnd, noProtect;

<<
 A .@@@@@@@@@@@
 B .@@@@@@@@@@@
>>
End;

HandleEvent

cmDefault : 
  Case CurField Of
    #dEnd: 
      Message('Запуск...');
    else 
      PutCommand(cmValue1);
  End;

cmValue1: 
  Case CurField Of
    #dBeg:  
      SelectField(#dEnd);
  End;

End;

END.
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

Сергей, :super:
Аватара пользователя
Screw
топ-софт
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Сообщение Screw »

Убрать DoAccept было достаточно. Стандартная обработка Enter как раз и заключается в смене фокуса. Если в обработчике cmDefault не скомандовать Атлантису stop (или abort - нет доки под рукой), он честно сменит фокус в дополнение к тому, что указал в обработчике прикладник.
Ответить