Турбо Паскаль 6.0

Буфер вывода.


Чтобы избежать этого, создайте новый Draw, который включает каждую строку в буфер до ее вывода в окне. TDrawBuffer - это глобальный тип:

TDrawBuffer = array[0MaxViewWidth-1] of Word;

Примечание: MaxViewWidth равен 132 символам.

TDrawBuffer содержит байты с атрибутами и с символами. Новый TInterior.Draw имеет вид:

{ TVGUID07.PAS }

procedure TInterior.Draw; var Color: Byte; Y: Integer; B: TDrawBuffer; begin Color := GetColor(1); for Y := 0 to Size.Y - 1 do begin MoveChar(B, ' ', Color, Size.X); { заполняет строку пробелами } if (Y < LineCount) and (Lines[Y] <> nil) then MoveStr(B, Copy(Lines[Y]^, 1, Size.X), Color); WriteLine(0, Y, Size.X, 1, B); end; end;

Рис. 2.4 показывает TVGUID07 с несколькими открытыми окнами.

Рис. 2.4. Просмотр нескольких файлов.

+-----------------------------------------------------------------+ | File Window | |*****************************************************************| |***********+--- Demo Window 3 ----+******************************| |***********|{*********************|******************************| |***********|{ |******************************| |***********|{ Turbo Pascal 6.0 |******************************| |***********|{ Demo program from |******************************| |***********|{ |******************************| |***********+----------------------+******************************| |+--- Demo Window 1 ---+***+=[ю]Demo Window 5 [ш]=+***************| {********************|***|{*********************|***************| { |***|{ |***************| { Turbo Pascal 6.0 |***|{ Turbo Pascal 6.0 |4 ----+********| { Demo program from |***|{ Demo program from |******|2 ----+*| { |***|{ | |******|*| |+---------------------+***+=====================-+ 6.0 | |*| |*********************************|{ Demo program from | 6.0 |*| |*********************************|{ | from |*| |*********************************+----------------------+ |*| |*******************************************+-------------------+*| |*****************************************************************| |*****************************************************************| |*****************************************************************| |*****************************************************************| | Alt-X Exit F4 New Alt-F3 Close | +-----------------------------------------------------------------+

Draw вначале использует MoveChar для перемещения Size.X пробелов (ширина интерьера) соответствующего цвета в TDrawBuffer. Сейчас каждая строка дополняется пробелами до ширины интерьера. Затем Draw использует MoveStr для копирования текстовой строки в TDrawBuffer. Затем отображает весь буфер через вызов WriteLine.



Содержание раздела