Make your own free website on Tripod.com

7. Работа со списками

Для формирования списков следует вызвать макрос ViewList, EditList, InsOnlyList или DelOnlyList для того, чтобы обозначить начало списка. После макроса указывается: количество колонок в списке, id списка и его имя по формату l. Далее в скобках’, организуемых макросами Inclevel и Declevel указываются подряд сверху вниз справа налево сами колонки. Например, следующий код организует список вида

Название Количество
Свинья 1
Кабан 2

ViewList 2, ’list’, ‘lЖивотные’

IncLevel

ViewString ‘animal’, ‘sНазвание’, ‘Свинья’

ViewInt ‘total’, ‘iКоличество’, 1

ViewString ‘animal’, ‘sНазвание’, ‘Кабан’

ViewInt ‘total’, ‘iКоличество’, 2

DecLevel

Имя Животные в данном случае не появляется нигде, но будет использовано, если используется список списков. Такой список изображается как файл в Excel, которой содержит много страниц (sheet), которые выглядят как закладочки внизу и могут переключаться. Программируется такой список как список, в качестве элементов которого являются списки. При этом вместо количества столбцов указывается количество подсписков.

Возможность модификации данного элемента списка определяется самим элементом (View или Edit), не зависит от моды самого списка и может быть различной для элементов одной колонки в разных строках (!!!)

Мода списка влияет на то, можно ли вставлять и удалять в нем строки: в ViewList нельзя, в EditList можно, в InsOnlyList только вставлять, в DelOnlyList Только удалять.

Параметр у колонки size= указывает ее предопределенную ширину в символах (размер нуля).

При вставке новой строки списка значения заносятся по умолчанию, указываемому в def.

При формировании списка используются форматные строки элементов ПЕРВОЙ строки. (и в приведенном выше примере повтор форматных строк для второй строки списка излишний, они игнорируются, однако так как часто списки заполняются в цикле, не имеет смысла делать специальные проверки на первый элемент) Как их указать, если список пустой ? Для этого используются макросы Header* (Int,String,Float,Date,Money). У них не указывается значение. Их можно использовать и в случае, если список не пустой, и пример с животными можно переписать так:

ViewList 2, ’list’, ‘lЖивотные’

HeaderString ‘animal’, ‘Sназвание’

HeaderInt ‘total’, ‘iКоличество’

IncLevel

ViewString ‘animal’, ‘’, ‘Свинья’

ViewInt ‘total’, 1

ViewString ‘animal’, ‘’, ‘Кабан’

ViewInt ‘total’, 2

DecLevel

При редактировании списка в поле ChangeMode записывается значения:

Эта информация используется при записи (put) или recycle (cycl). Процедура Recycle должна сбросить признак ChangeMode в 0 и пометить те элементы списка, которые она изменила аналогичным образом

При чтении списка надо быть осторожным и читать только элементы с AccMode>=0 (отрицательные номера используются для служебных целей, например, для хранения заголовков Header...)