Приложение.




Пример программы с использованием библиотеки 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.