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

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

В следующей программе на экране создается несколько окон, содержащих один и тот же текст – текст программы (см. рис. 23.3).

Иллюстрированный самоучитель по Turbo Pascal › Практика использования › Окно с текстом
Рис. 23.3. Окна с текстом программы

Каждое новое окно открывается с помощью клавиши Ins. Активное окно можно удалить клавишей Del или распахнуть на весь экран клавишей F5. С помощью мыши Вы можете перемещать активное окно по экрану и/или изменять его размеры.

Uses Objects,App,Views,Drivers,Menus;
const
cmNewWin = 200;
cmDelWin = 201;
MaxLine = 22; {Количество текстовых строк}
var
Lines: array [0.. MaxLine] of String [80];
type
MyApp = object (TApplication)
WinNo: Word;
Constructor Init;
Procedure InitStatusLine; Virtual;
Procedure HandleEvent (var Event: Tevent); Virtual;
Procedure NewWindow;
end;
PInterior = Tinterior;
TInterior = object (TView)
Constructor Init(R: TRect);
Procedure Draw; Virtual;
end;
{----------------}
Constructor MyApp. Init;
{Открывает и читает файл с текстом программы}
var
f: text;
s: String;
k: Integer;
begin
Inherited Init;
WinNo: = 0; {Готовим номер окна }
for К: = 0 to MaxLine do
Lines [k]: = ' '; {Готовим массив строк}
s: = copy(ParamStr(0),1,pos ('.',ParamStr(0)))+'PAS';
{$I-}
Assign (f,s);
Reset (f);
if IOResult < > 0 then
exit; {Файл нельзя открыть}
for k: = 0 to MaxLine do
if not EOF(f) then ReadLn(f, Lines [k]);
Close(f)
{$I+}
end {MyApp.Init};
{----------------}
Procedure MyApp. InitStatusLine;
var
R: TRect;
begin
GetExtent (R);
R.A.Y: = pred(R.B.Y);
StatusLine: = New(PStatusLine, Init(R,
NewstatusDef (0,$FFFF,
NewStatusKey (' ~ALT + X~ Выход', kbALTX, cmQuit,
NewStatusKey (' ~Ins~ Открыть новое', kbIns, cmNewWin,
NewStatusKey (' ~Del~ Удалить активное', kbDel, cmClose,
NewStatusKey (' ~F5~ Распахнуть ', kbF5, cmZoom, NIL)))), NIL)))
end {MyApp. InitStatusLine};
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.