Обсуждение:Диалоги. "F3" вместо F3 (317)

5 (1)
  • Развернуть Обсуждение:Диалоги. "F3" вместо F3 (317) ( Обсуждение примера  04.12.2002 08:00 )
    0(0)
    Использование функциональных клавиш в диалогах через строки:

    piFuncKey(sKey) - код функциональной клавиши (число).
    psFuncKey (iKey[, bPart]) - функциональная клавиша (строка); если определён II-ой пар-р, то строка выводится в сокращенном виде (например: "A-F3", "S-F11" вместо "Alt-F3", "Shift-F11").

    * Дополнительно обрабатываются Enter и Esc

    ЗЫ: Интересно узнать: кто-нибудь пробовал распознать остальные клавиатурные коды?
    Посмотреть пример
    >> Ответить
    • Развернуть А что можно при помощи этого, делать? ( SUN  29.07.2003 08:56 )
      0(0)
      Например, мне надо в файле bill.mac (RS-Balance), отловить нажатии клавиши (которую я задам), в тот моент когда я нахожусь в спецификации счета?
      >> Ответить
      • Развернуть пример использования в bill.mac ( K0  29.07.2003 11:39 )
        0(0)
        В файле bill.mac находится функция E_bill_spc, которая является обработчиком нажатий клавиш в спецификации счета.

        Вставив команду msgbox:
        ...
        macro E_bill_spc(RecBuf, Saveb, key)

        msgbox("key = " + key);

        return key;
        end;
        ...

        Вы сможете увидеть код нажатой клавиши в спецификации счета. Например, если нажать функциональную клавишу F3, то перед открытием окна каталога товаров появится сообщение: key = 317.
        Зная код F3 и желая выполнить какое-то действие до входа в каталог товаров, можно написать следующее:

        ...
        macro E_bill_spc(RecBuf, Saveb, key)

        if (key == 317) msgbox ("Открывается каталог товаров (по F3)") end;
        return key;
        end;
        ...

        Но использование большого количества безымянных констант усложняет код. Лучше константы определять:

        const F3 = 317;
        ...
        if (key == F3)
        ...

        Но помимо функциональных клавиш F1-F12 в диалогах можно применять Alt-F1, Shift-F9 и т.п.. Тогда список таких констант будет довольно объёмным, что тоже нежелательно (при создании программы не рекомендуют применять большое количество глобальных констант и переменных). Для таких случаев и предлагается использовать функции piFuncKey,psFuncKey. Применить одну из них (psFuncKey) в вышеописанной функции-обработчике можно так:

        /*файлы из примера (f_sfkey.mac и др.) должны находиться в одном каталоге с bill.mac*/
        import "f_sfkey";
        ...
        macro E_bill_spc(RecBuf, Saveb, key)
        var s = psFuncKey(key);
        if (s == "F3") msgbox ("Открывается каталог товаров (по "+s+")") end;
        return key;
        end;
        ...

        В итоге в коде
        - не нужно знать код функциональной клавиши F3 (код F3 = 317)
        - нет необходимости определять многочисленные глобальные константы (F3, Alt_F3, Shift_F11 и т.д.)
        *Полученную строковую переменную (s="F3") в дальнейшем удобнее использовать, чем код клавиши (key) (см. последний msgbox).

        Конечно, эффект от применения этих функций лучше виден на примере обработки собственных диалогов с множеством дополнительных служб.
        >> Ответить