Иллюстрированный самоучитель по Turbo Pascal

Окно с текстом

{---------------------}
Procedure MyApp. HandleEvent;
{Обработка нестандартных команд cmNewWin, cmDelWin}
begin
Inherited HandleEvent (Event);
case Event. Command of
cmNewWin:
begin
ClearEvent (Event);
NewWindow;
end;
cmDelWin: Event. Command: = cmClose;
end;
ClearEvent(Event)
end {MyApp.HandleEvent };
{-------------------}
Procedure MyApp.NewWindow;
{Открывает новое окно}
var
R: TRect;
W: PWindow;
begin
Inc(WinNo); {Номер окна}
{Задаем случайные размеры и положение окна: }
R. Assign (0, 0.24+Random(10),7+Random(5));
R. Move (Random (80 – R. В. X),Random(24-R.B.Y));
W: = New (PWindow, Init (R, ' ',WinNo));
W^.GetClipRect (R); {Получаем в R границы окна}
R.Grow(-1, -1); {Размер внутренней части окна}
{Инициируем просмотр текста: }
W. Insert (New (PInterior, Init(R)));
DeskTop .insert (W); {Помещаем окно на экран}
end {MyApp.NewWindow};
{-------------------}
Constructor TInterior.Init;
{Инициация просмотра текста во внутренней части окна}
begin
Inherited Init (R);
GrowMode: = gfGrowHiX+gfGrowHiY
end {Tinterior.Init};
{-----------}
Procedure TInterior. Draw;
{Вывод текста в окне}
var
k: Integer;
В: TDrawBuffer;
begin
for k: = 0 to pred(Size.Y) do
begin
MoveChar(B,' ',GetColor(1),Size.X);
MoveStr(B, copy(Lines[k],1,Size.X),GetColor(1));
WriteLine(0,k,Size.X,1,B)
end
end {TInterior.Draw};
{-------------------}
var
P: MyApp;
begin
P.Init;
P.Run;
P.Done
end.

В программе объявляется тип TInterior, предназначенный для создания изображения во внутренней части окон. Его метод Init определяет способ связи объекта TInterior со стандартным объектом TWindow – оператор:

GrowMode: = gfGrowHiX+gfGrowHiY

Задает автоматическое изменение размеров объекта TInterior при изменении размеров окна так, чтобы вся внутренняя часть окна была всегда заполнена текстом. Метод TInterior.Draw заполняет внутреннюю часть окон текстовыми строками, которые в ходе выполнения конструктора TMyApp.Init предварительно считываются из файла с исходным текстом программы в глобальный массив Lines.

Для вывода текста сначала с помощью метода MoveChar буферная переменная В типа TDrawBuffer заполняется пробелами, затем методом MoveStr в нее копируется нужный текст, а с помощью WriteLine содержимое переменной В помещается в видеопамять. Такая последовательность действий стандартна для вывода текстовых сообщений в Turbo Vision. Заметим, что функция GetColor (1) возвращает номер элемента палитры, связанный с обычным текстом; для выделения тестовых строк можно использовать вызов GetColor (2).

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.