Переход по контролам клавишами Enter, Up и Down.
В настоящее время 90% работы наших менеджеров - ввод данных заказа на рекламу и работа с данными клиентов. В TS CRM это будет реализовано в формах Account, Contact и Invoice.
Для облегчения перехода на новую программу решил реализовать максимально похожий интерфейс.
Реализовал это при помощи массива с именами контролов и KeyPreview формы.
В скрипт каждой формы, где нужен такой переход, вставляется вставляется подобный массив:
В OnPrepare добавляем атрибут окна "TagsArray". Он необходим для генерации массива TagsArray(см ниже).
При нажатии на одну из этих клавиш обрабатывается событие формы:
if ((Key.Value==40)||(Key.Value==38)||(Key.Value==13)){
NextCtrl(Window,Key.Value != 38 );
}
}
function NextCtrl(Window,Next){
var tar=Window.Attributes('TagsArray') ;
var contrl=Window.FocusedControl;
if(!contrl){return;}
for (var i = 0; i tar.length; i++){
if (contrl.Name==tar[i]){
if(Next){
Window.FocusedControl=Window.ComponentsByName(tar[(i==TagsArray.length-1)?0:i+1]);
}else{
Window.FocusedControl=Window.ComponentsByName(tar[(i==0)?TagsArray.length-1:i-1]);
}
}
}
}
Для того, чтоб в LookUpDataControl'ах для полей с галочкой "отображать как выпадающий список" при нажатии на клавиши Вверх/Вниз не менялось значение добавляем в событие OnKeyDown:
if ((Key.Value==38)||(Key.Value==40)){
Key.Value=0;
}
}
И чудо свершилось.......
Для первоначального заполнения массива TagsArray создал окно, которое генерирует данный массив, которое временно вставляется в необходимое окно через WindowContainer и помещает имена контролов данной формы в необходимом порядке в контрол Memo, из которого нужно скопировать эту строку в скрипт формы на которой будет переход.
Cкрипт этого окна во вложении.
Просьба не кидать в меня помидорами, т.к. я есть плоха гаварить па-русски + я еще ламер в программировании на Java+ это мой первый блог...