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;