Есть необходимость выбора элементов из большого списка.
Написал сценарий. Он выводит большой список элеменов с чекбоксами на экран по 10 штук, до последнего, записывает состоние чекбоксов, создает список выбранных.
1. Может я перемудрил и можно сценарий упростить ?
2. Некорректно работает режим жирного шрифта ($w_flag = 110), где ошибка ?
#include "Window.cms"
//==============================================================================
//LOGCLEAR
$input_file = "Buildings.txt" // Исходные данные - большой список
$output_file = "Buildings_selected.txt" // Результат - список выбранных
TFREADARR($input_file, $items_all)
TFREADARR("item_flags_all.txt", $itemsflags_all)
TFCLEAR ("item_flags_all.txt", 1)
IF(ARRSIZE($itemsflags_all) < ARRSIZE($items_all))
FOR($i = ARRSIZE($itemsflags_all) , $i < ARRSIZE($items_all))
ARRPUSH($itemsflags_all, 0)
END_CYC
END_IF
//##############################################################################
//Вывод текста на экран по 10 строк с чекбоксами
FOR($a, $a < INT ((ARRSIZE($items_all) / 10)+1))
$n = $check * 10
FOR($i = $n, (($i < $n+10) AND ($i < ARRSIZE($items_all)))
ARRPUSH($items, $items_all[$i])
ARRPUSH($itemsflags, $itemsflags_all[$i])
END_CYC
Window_checkbox_flags(110, "Выберите пункты :", 35)
// Window_checkbox_flags(110, "Выберите пункты :", 35) //жирным шрифтом текст не помещается ?
STRSEPARATE ($flags, ",", $item_flags)
STRSEPARATE($text, "|", $selecteditems)
$flags = $item_flags[0]
FOR($i=0, $i < ARRSIZE($item_flags))
$flags = STRCONCAT($flags, ",", $item_flags[$i])
IF($item_flags[$i] = 1) // Запись выбранных в массив
ARRPUSH($Selected, $selecteditems[$i])
END_IF
END_CYC
//==============================================================================
// Подговка ответа
IF(ARRSIZE($Selected) > 0)
$otv = $Selected[0]
FOR($i=1, $i < ARRSIZE($Selected))
$otv = STRCONCAT($otv, "\n", $Selected[$i])
END_CYC
$text = STRCONCAT("Выбраны пункты:\n\n", $otv)
IF($return = -1)
$hint = "Состояние чекбоксов не изменено"
HINTPOPUP($hint, "ВНИМАНИЕ")
END_IF
ELSE
$text = "Вы ничего не выбрали"
END_IF
//==============================================================================
TFWRITEARR ($output_file, $Selected) // Запись списка выбранных
UNDEFINE($items)
UNDEFINE($itemsflags)
UNDEFINE($Selected)
INC($check) // следующие 10 строк
END_CYC
//##############################################################################
TFWRITEARR ("item_flags_all.txt", $item_flags) // запись состояния чекбоксов
//==============================================================================
// Вывод списка выбранных на экран
Window_2(64, "", 10)
HALT