Публикация

Переход по контролам по Enter

Переход по контролам клавишами Enter, Up и Down.
В настоящее время 90% работы наших менеджеров - ввод данных заказа на рекламу и работа с данными клиентов. В TS CRM это будет реализовано в формах Account, Contact и Invoice.
Для облегчения перехода на новую программу решил реализовать максимально похожий интерфейс.
Реализовал это при помощи массива с именами контролов и KeyPreview формы.
В скрипт каждой формы, где нужен такой переход, вставляется вставляется подобный массив:

var TagsArray=new Array("edtOwner", "edtOfferingType", "edtKod", "edtCustomer", "edtKl", "edtPhone", "edtOfferingID", "edtrubID", "edtpayvidID", "edtplo", "edtkol", "edtSk", "edtAmount", "edtDat1", "edtqw", "edtChoosePlace", "edtChN", "edtPrice", "edtmaxpaydat", "edtSum2", "edtDat2", "edtPlace", "edtSupplier", "edtBillStatus", "edtCurrency", "edtCurrencyRate", "edtBasicAmount", "edtPaymentDate", "edtPaymentAmount", "edtShipmentState", "edtBasicPaymentAmount", "edtProject", "edtOportunity", "edtContract", "edtContact", "edtCampaign", "edtChanel");

В OnPrepare добавляем атрибут окна "TagsArray". Он необходим для генерации массива TagsArray(см ниже).

SetAttribute(Window, 'TagsArray', TagsArray);

При нажатии на одну из этих клавиш обрабатывается событие формы:

function wnd_InvoiceEditOnKeyUp(Window, Key, UnicodeKey, Shift) {
        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:
function LookupDataControlOnKeyDown(Control, Key, Shift) {
        if ((Key.Value==38)||(Key.Value==40)){
            Key.Value=0;
        }
}      

И чудо свершилось.......

Для первоначального заполнения массива TagsArray создал окно, которое генерирует данный массив, которое временно вставляется в необходимое окно через WindowContainer и помещает имена контролов данной формы в необходимом порядке в контрол Memo, из которого нужно скопировать эту строку в скрипт формы на которой будет переход.

Cкрипт этого окна во вложении.
Просьба не кидать в меня помидорами, т.к. я есть плоха гаварить па-русски + я еще ламер в программировании на Java+ это мой первый блог...

Нравится

Поделиться

0 комментариев
Показать все комментарии