ПриИзмененииРазмераОкна() использую повсеместно, особо не замечая выявленных недостатков (поглощались быстродействием), пока не встала текущая задача, требующая значительного времени в исполнении (полный расчет всех параметров плана, оборудования, потерь и т.п.). Недостатки проявились в многократном пересчете данных, что провоцировало моргания, двукратные прорисовки в разных масштабах и т.д.
Короче, после поисков и экспериментов вопрос решен так:
var PlanW,PlanH,old_PlanW,old_PlanH;
var ЭтоОткрытие,ЭтоЗакрытие,СобытиеОкна;
--
procedure ПриАктивацииОкна()
var Attrib;
Attrib=СоздатьОбъект("АтрибутФормы");
Attrib.setAttribute(Форма,"План");
Attrib.GetCoordinates(PlanX,PlanY,PlanW,PlanH);
ЭтоОткрытие=0;
if (PlanW<>old_PlanW) or (PlanH<>old_PlanH) then
ПерерисоватьПлан();
endif;
endprocedure // ПриАктивацииОкна()
--
procedure ПриДеактивацииОкна()
old_PlanW = PlanW;
old_PlanH = PlanH;
ЭтоОткрытие=1;
endprocedure // ПриДеактивацииОкна()
--
procedure ПриЗакрытии()
...
...
ЭтоЗакрытие=1;
endprocedure // ПриЗакрытии()
--
procedure ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
var Attrib;
if (ТипСобытия <> 0) and (ТипСобытия=СобытиеОкна) and (ИзменениеУзлов=0) then
return;
endif;
if (ТипСобытия=1) or (ЭтоОткрытие=1) or (ЭтоЗакрытие=1) then
return;
endif;
...
...
Attrib=СоздатьОбъект("АтрибутФормы");
Attrib.setAttribute(Форма,"План");
Attrib.GetCoordinates(PlanX,PlanY,PlanW,PlanH);
РасшФормы.ОбработкаОжидания("ПерерисоватьПлан",3);
СобытиеОкна=ТипСобытия;
endprocedure // ПриИзмененииРазмераОкна()
++
old_PlanW = 0; old_PlanH = 0;
ЭтоОткрытие=1; СобытиеОкна=0; ЭтоЗакрытие=0;
Вот такие танцы с бубном...