Здравствуйте!
Возможным вариантом наименования переменных - использование суффикса, ссылающегося на набор переменных, например:
<имя переменной>_<номер Модуля><номер Камеры из двух цифр, начиная с 1>.
В этом случае для работы с одним общим окном (пример с двумя объектами) достаточно универсального скрипта (события "Пользователь перешел на эту страницу", "Пользователь перешел на эту подстраницу", "Пользователь закрыл окно"):
const ObjName: array [1..2] of string[10] = ('Field1', 'Button1'); // связывание переменной с объектом окна
VarName: array [1..2] of string[10] = ('Var1_', 'iButt1_'); // для большого числа переменных удобнее двумерный массив (как в 3 окнах)
var i: integer;
begin
for i := 1 to 2 do // привязать реальные переменные к объектам окна
GetObjectByName(ObjName[i]).Variable := GetVariableByName(string(VarName[i]) + IntToStr(Sender.Tag));
GetPageByName('Set' + IntToStr((Sender.Tag div 100) * 100)).Tag := Sender.Tag; // запомнить набора для этой страницы (
Window1.Tag := Sender.Tag; // запомнить для восстановления окна после попытки закрыть "незакрываемое" окно.
Window1.ShowAll;
end.
Существенным является определение тегов и название страниц/подстраниц:
- для подстраниц постоянное значение равное индексу набора;
- для страниц - начальное значение равное индексу первой подстраницы;
- для окна - начальное ноль, к переменным подключен первый набор;
- в данном примере страница - Set<номер Модуля>00, подстраница - Set<номер Модуля><номер Камеры>.
Добавление "новых" окон сводится к созданию нового набора переменных и добавлению подстраницы или страницы.
Вариант с 3 окнами - скрипт аналогичного вида с событием "Изменились переменные" для переменных "Вектор выбора подстраницы" (в примере iSelPage<номер Модуля>) у каждой страницы. По имени и значению переменной скрипт формирует индекс набора и далее привязывает переменные.
Добавление новых подстраниц - создание нового набора данных и добавление новой кнопки на странице, добавление новых страниц - создание новой переменной "Вектор выбора подстраницы", связывания ее с кнопками выбора подстраниц, добавление имен объектов страницы в таблицу, связывающую имена переменных и объектов. И кое-что по мелочи.
Поместить объекты на новую страницу можно копированием с предыдущей, и при удачном выборе имен объектов, после копирования легко поправить таблицу, начальной привязки переменных не требуется (выполнится при инициализации переменных "Вектор ...").
1. Сравнить варианты можно в проекте из вложения, однако вариант с "постоянно хлопающим окном" (в т.ч. и при смене подстраницы в этом примере) менее предпочтителен для оператора.
2. Для объектов требующих связывание данных, кроме переменной (таблица, список с уникальными значениями, ...) в скрипте потребуется анализ (и соответствующий код) либо типа, либо имени объекта.
3. Проект лишь иллюстрация к данному способу наименования переменных. (отсутствие контроля, спорный код, неоптимальность кода и т.д.)