Приложение.
Пример программы с использованием библиотеки TurboVision.
program Hello;
uses App, Objects, Menus, Drivers, Views, Dialogs;
const
cmGreetingBox = 200;
{Определение новой команды.}
type
THelloApp = object(TApplication)
{Определение нового типа объекта для обеспечения требуемой
функциональности.}
procedure GreetingBox;
{Определение нового метода, отсутствующего в типе TApplication}
procedure HandleEvent(var Event: TEvent); virtual;
{Перекрытие HandleEvent для обработки новых событий}
procedure InitStatusLine; virtual;
{Перекрытие InitStatusLine для инициализации строки статуса}
procedure InitMenuBar; virtual;
{Перекрытие InitMenuBar для инициализации строки меню}
end;
var
HelloWorld: THelloApp;
{Образование экземпляра объекта для выполнения}
procedure THelloApp.GreetingBox;
{Процедура создания диалогового окна 'Hello, World!'}
var
R: TRect;
Dialog: PDialog;
Control: Word;
begin
R.Assign(0, 0, 37, 13); R.Move(20, 3);
{Назначение границ для диалогового окна}
Dialog := New(PDialog, Init(R, 'Hello, World!'));
{Создание экземпляра объекта диалогового окна типа TDialog}
with Dialog^ do {Вставка подэлементов в диалоговое окно}
begin
R.Assign(4, 5, 16, 6); {Назначение границ подэлемента}
Insert(New(PStaticText, Init(R, 'How are you?')));
{Создание и вставка объекта статического текста}
R.Assign(20, 3, 32, 5);
Insert(New(PButton, Init(R, '~T~errific', cmOK, bfNormal)));
{Создание и вставка объекта кнопки}
R.Assign(20, 6, 32, 8);
Insert(New(PButton, Init(R, '~O~K', cmOK, bfDefault)));
R.Assign(20, 9, 32, 11);
Insert(New(PButton, Init(R, '~C~ancel', cmCancel, bfNormal)));
end;
Control := DeskTop^.ExecView(Dialog);
{Вставка диалогового окна в панель экрана для модального
выполнения}
Dispose(Dialog, Done);
{Освобождение памяти, занимаемой объектом диалогового окна,
после его выполнения}
end;
procedure THelloApp.HandleEvent(var Event: TEvent);
begin
TApplication.HandleEvent(Event); {Наследуемый HandleEvent}
if Event.What=evCommand then
begin
case Event.Command of
cmGreetingBox : GreetingBox;
{Определение реакции на команду cmGreetingBox}
else
Exit;
end;
ClearEvent(Event);
{Очистка события после выполнения процедуры GreetingBox}
end;
end;
procedure THelloApp.InitStatusLine;
{Инициализация строки статуса}
var
R: TRect;
begin
GetExtent(R); {Возвращает в R область, занимаемую TApplication}
R.A.Y := R.B.Y - 1; {Преобразует R в нижнюю строку этой области}
StatusLine := New(PStatusLine, Init(R,
{Создание экземпляра объекта типа TStatusLine}
NewStatusDef(0, $FFFF,
{Определение поддиапазона контекстной подсказки}
NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit,
{Включение в строку статуса элемента "Alt-X Exit" с горячей
клавишей "Alt-X", и связывание с ним команды cmQuit (выход из
программы)}
NewStatusKey('~F10~ Menu', kbF10, cmMenu,
{Включение в строку статуса элемента "F10 Menu" с горячей
клавишей "F10", и связывание с ним команды cmMenu (вызов
меню)}
nil)), {Больше не определено элементов}
nil) {Больше не определено поддиапазонов контекстной подсказки}
));
end;
procedure THelloApp.InitMenuBar;
{Инициализация строки меню}
var
R: TRect;
begin
GetExtent(R); {Возвращает в R область, занимаемую TApplication}
R.B.Y := R.A.Y + 1; {Преобразует R в верхнюю строку этой области}
MenuBar := New(PMenuBar, Init(R, NewMenu(
{Создание экземпляра объекта типа TMenuBar}
NewSubMenu('~H~ello', hcNoContext, NewMenu(
{Определение выпадающего подменю 'Hello' с коротким набором
'H'.}
NewItem('~G~reeting...', '', kbNoKey, cmGreetingBox, hcNoContext,
{Определение элемента подменю "Greeting..." с горячей клавишей
"G", и связывание с ним команды cmGreetingBox}
NewLine(
{Вставка линии-разделителя между элементами подменю.}
NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext,
{Определение элемента подменю "Exit" с горячей клавишей
"Alt-X", и связывание с ним команды cmQuit}
nil)))), {Больше не определено элементов подменю}
nil) {Больше не определено подменю}
)));
end;
begin
HelloWorld.Init; {Инициализация HelloWorld}
HelloWorld.Run; {Выполнение HelloWorld}
HelloWorld.Done; {Освобождение памяти HelloWorld}
end.