Обсуждение:Диалоги. "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).
Конечно, эффект от применения этих функций лучше виден на примере обработки собственных диалогов с множеством дополнительных служб.
>> ОтветитьСпасибо, за столь исчерпывающий ответ. ( SUN 30.07.2003 05:17 )
0(0)Not specified
>> Ответить