лично я делаю как Валенок)),на двадцать своих экранов использую всего девять(максимум десять регистров обмена), панель в режиме мастер:
-tlister - регистр номера текущего листа;
-lister - регистр изменения номера листа;
шесть регистров обмена значений(больше на лист панельки не влезает);
-Reg1, Reg2, Reg3, Reg4, Reg5, Reg6;
два байта (16 бит) на обработку кнопочек панели
-b_1, b_2... b_0,b_END...b_DOWN
и байт на различные индикаторы(хотя я обычно использую биты кнопок, они все разом тоже на лист панели всёравно не влазят)))
далее в CASE смотрю что за лист и соответственно её обрабатываю:
CASE tlister OF
1: (*проверяем изменился ли лист*)
IF NOT(last_list=tlister) THEN
last_list:=tlister;
END_IF
(*если информацию нужно выводит, просто присваиваем требуемое значение*)
Reg1:=value1;
....
Reg6:=value6;
2: (*если требуется редактировать значения, то в начеле выводим текущие значения...*)
IF NOT(last_list=tlister) THEN
last_list:=tlister;
Reg1:=value1;
....
Reg6:=value6;
END_IF
(*а потом подтверждаем изменения, например нажатием кнопки ENT...*)
if b_ENT then
b_ENT:=false;(*кстати обнулять следует и при первом входе на лист*)
value1:=Reg1;
...
value6:=Reg6;
end_if
(*или например отслеживая изменения регистра...*)
if NOT(Reg1=value1) then
value1:=Reg1;
end_if
3: (*переключатся между экранами можно стандартно(настраивая в конфигураторе панели) или программно...
IF NOT(last_list=tlister) THEN
last_list:=tlister;
b_UP:=false;
END_IF
if b_UP then
lister:=1;
b_UP:=false;
end_if
end_case
конечно в реале программа получается несколько посложней, все переменные для безопасности локализованы в одной процедуре, посложней обработчик програмного переключения экранов(так как тут после изменения регистра lister, регистр tlister изменяется с запозданием на несколко рабочих циклов, что, редко, но бывает критично), но в общем я придерживаюсь этой структуры...




Ответить с цитированием

