begin

i? not ( (Page>MaxPage) or (X1<1) or (X2<-X1) or (УК1) or (Y2<=Y1) or (X2>MaxChar) or (Y2>MaxLine) or (Bord>2)) then begin

(Очищаем прямоугольное окно на экране} Size := Х2-Х1+1;

for Y := 1 to Size do begin

buf[Y,ll := ordC •);

bu?[Y,2] :» Pages[Page].Attrib end;

Size := Size+Size;

for Y := Yl to Y2 do

MoveToScreen(Buf,Mem[VMemory:Page*VSize+ (pred(Y)*MaxChar+pred(Xl))*2],Size) ;

{Обводим его рамкой и выводим заголовок} if BordOEmptyBorder then

Border(Page,XI,Yl,X2,Y2,Bord);

if Length(Header)>0 then begin

if Length(Header)>X2-X1-2 then Header[0] :» chr(X2-Xl-2);

X := Xl+(X2-Xl-Length(Header)) div 2;

for k := 1 to Length(Header) do

WriteCharXY(Page,X+k,Yl,Header W);

end;

{Корректируем границы внутрь прямоугольника XI...Y2, если признак Clip равен Гrue^ if Clip then begin inc(XI) ;

inc (YD ;

dec(X2);

dec(Y2) end;

{Устанавливаем курсор в левую вершину ft запоминаем координаты} dec(XI); (Преобразуем координаты} dec(Yl); {к началу в точке 0,0} dec(X2);

dec(Y2) ;

PutCursor(Page,Xl+l,Yl+l);

Pages[Page 1.WBondUp :-X1+Y1 shi 8;

Pages[Page 1.WBondDown :=X2+Y2 shi 8;

if page=ActivePage then

SetActivePage(Page) end end {SetPageWindow};

^———————————————————————-.Jl

Procedure SetWindAttribute(Page,Attr: Byte);

{Устанавливает новый атрибут окна} var

X1,Y1,X2,Y2: Byte;

begin

if page<-MaxPage then with Pages[Page] do begin

XI Lo(WBondUp) ;

XI := Hi(WBondUp) ;

X2 :- Lo(WBondDown)+2;

Y2 :» Hi(WBondDown)+2;