Урок 4. Учимся создавать выбор из массива посредством клавиши «пробел» при вводе, создание горячих клавиш

Перечень изучаемых функций InitList()

Задача урока:

· В режиме ввода/корректировки использовать перебор данных из существующего массива посредством клавиши "пробел" по наименованию услуг.

+ Предположим

у нас есть всего 3 услуги и мы будем выбирать их из массива

o Услуги по программированию
o Услуги консультанта
o Услуги системного инженера
o Подключить функцию на горячую клавишу
Выполнение:

1.Подключение горячей клавиши

- подключим файл переменных горячих клавиш

Итак коллеги пришло время нового занятия....

В 12 версии он есть в BIN\include

Перед функцией main() вставим строчку

#include "inkey.ch"
· подключим вызов функции на SHIFT-F5

Создаем aHotKey

aHotKey:={{},{{'F5 - моя функция',K_SH_F5,{||myfunction()},1}},{}}
· создадим функцию для вызова по горячей клавише

после нашего главного RETURN NIL

FUNCTION myfunction()
SAYANDWAIT("OK")
RETURN 2
· Initlist меняем на
work->(INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,aRef,aPic,aWhen,,;
nUniMode,bDel,,,,;
,,,,,;
,,cFindMacro,,, ;
,,,,aHotKey))
Примечание
· В конце функции RETURN 2 – параметр для обновления экрана по правилам QBROWSE()
· При организации InitList код ENTER определяется для выполнения корректировки. Другая функция не можете переопределить существующий код клавиши и это вобщем-то разумно. Для этого Вам нужно сбросить его в NIL через обычный SETKEY
· Данный пример мы рассматриваем через InitList - потому что он при нажатии SHIFT,CTRL,ALT еще и меню на экране отображает
 

2. Организуем выбор из массива при вводе

· Создадим массив
aType:={{'1','Услуги системного инженера'}, ;
             {'2','Услуги по программированию'},;
             {'3','Услуги консультанта       '},      ;
             {'4','Услуги по терминальной св.'}}
· исправим наш массив справочника
aRef:={,,{|x|ROTATEANDREADER(x,m->aType)},,,,"partners"}
· создадим параметр aGetBlock:={,,{|x|RotateBlock(x,m->aType,"aIn[3]")}}
· Подправим нашу итоговую строчку
work->(INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,aRef,aPic,aWhen,,;
nUniMode,bDel,,,,;
,,aGetBlock,,,;
,,cFindMacro,,, ;
,,,,aHotKey))
 

ВНИМАНИЕ !!! Данное описание для демонстрации подключения клавиши пробел.

Приимечание
· для того чтобы на экране было наименование услуги надо добавить поле в базу TYPE C 1 0 и дальше при выводе на экране можно тогда в массиве блоков кода вместо
{{||FIELD->NAME},....}
написать
{{|| IF(!EMPTY(FIELD->TYPE),aType[VAL(FIELD->TYPE),2],SPACE(25))}....}

Поле NAME в этом случае будет не нужно - если по нему не нужен фрагментный поиск

· Для того чтобы подставляло при редкатировании имеемое значение надо использовать
bPreGet:={|x,y,z|aIn[x]:=FIELD->VID}