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

Окно со скроллером

Close (f)
end
else {Файл не был открыт}
Lines. Insert (NewStr (' Нет доступа к файлу '+name));
{Создаем окно со скроллером: }
DeskTop.GetExtent (R);
W: = New (PWindow, Init (R, 'Просмотр файла '+name,0));
with W do
begin
GetClipRect(R);
R.Grow(-1, -1);
Insert (New (PInterior, Init (R, StandardScrollBar (
sbHorizontal+ sbHandleKeyboard),
StandardScrollBar (sbvertical+sbHandleKeyboard))))
end;
DeskTop. Insert (W);
{Ждем действий пользователя:}
Inherited Run end {TMyApp.Run};
{----------------}
Constructor TInterior.Init;
{Создает окно скроллера}
begin
Inherited Init (R, SX, SY);
GrowMode: = gfGrowHiX+gfGrowHiY;
SetLimit(128, Lines.count -1)
end {TInterior.Init};
{----------------}
Procedure TInterior.Draw;
{Выводит на экран содержимое окна скроллера}
var
Y: Integer;
В: TDrawBuffer;
S: String;
begin
for Y: = 0 to pred(Size.Y) do
begin
MoveChar(B,' ',GetColor (1), Size.X);
if (Y+Delta.Y < Lines. Count) and
(Lines. At (Y+Delta.Y) < > NIL) then
begin
S: = PString (Lines. At (Y+Delta.Y));
MoveStr (В, copy (s, Delta. X+1, Length (s) –
Delta. X), GetColor(1))
end;
WriteLine(0,Y,Size.X,1,B)
end
end {TInterior.Draw};
{----------}
var
P: TMyApp;
begin
P.Init;
P. Run;
P. Done
end.

В программе перекрывается метод TApplication.Run. В потомке TMyApp этот метод вначале считывает текстовые строки из файла с текстом программы в коллекцию Lines и создает на экране окно со скроллером. После этого вызывается стандартный метод TApplication.Run.

Метод TInterior.Draw обеспечивает вывод нужных строк в окно скроллера. Для определения порядкового номера выводимых строк и их положения относительно границ скроллера используется поле TScroller.Delta. Обратите внимание: если в коллекцию помещается "пустая" строка, т.е. строка нулевой длины, глобальная функция NewStr возвращает значение NIL. В методе TInterior.Draw оператор:

if (Y+Delta.Y < Lines .count) and
(Lines.At(Y+Delta.Y) < > NIL) then…

Осуществляет проверку значения получаемого из коллекции указателя на NIL; если бы мы не предусмотрели эту проверку, прогон программы (использование NIL-указателя) на некоторых ПК мог бы привести к аварийному останову.

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