program @XX5;
@ZZ7

uses WObjects, WinTypes, WinProcs, Strings, WinDos, StdDlgs, StdWnds;

@ZZ6
type
  T@XX1 = object(TApplication)
    procedure InitInstance; virtual;
    procedure InitMainWindow; virtual;
@ZZ11
    function ProcessAppMsg(var Message: TMsg): Boolean; virtual;
@ZZ11
  end;

  P@XX2 = ^T@XX2;
  T@XX2 = object(@XX0)
@ZZ9

    constructor Init(ATitle : PChar);
    procedure SetupWindow ; virtual;
    function GetClassName : PChar; virtual;
    procedure GetWindowClass(var AWndClass : TWndClass); virtual;
@ZZ0
    destructor Done; virtual;
  end;

@XX9{-------T@XX2.Init}
constructor T@XX2.Init(ATitle : PChar);
begin
@XX0.Init(Nil, @XX8);
@ZZ8
with Attr do
  begin
  Style := @XX6;
@ZZ2
  end;
@ZZ8
end;

{-------T@XX2.SetupWindow;}
procedure T@XX2.SetupWindow;
begin
@XX0.SetupWindow;
@ZZ10
end;

{-------T@XX2.GetClassName}
function T@XX2.GetClassName : PChar;
begin
GetClassName := '@XX3';
end;

{-------T@XX2.GetWindowClass}
procedure T@XX2.GetWindowClass(var AWndClass : TWndClass);
begin
@XX0.GetWindowClass(AWndClass);
with AWndClass do
  begin
@ZZ3
@ZZ4
  Style := @XX7;
  end;
end;

@ZZ1
{------T@XX2.Done}
destructor T@XX2.Done;
begin
@XX0.Done;
end;

{------T@XX1.InitMainWindow}
procedure T@XX1.InitMainWindow;
begin
  MainWindow := New(P@XX2, Init('@XX4'));
end;

{------T@XX1.InitInstance}
procedure T@XX1.InitInstance;
begin
TApplication.InitInstance;
@ZZ5
end;

@ZZ11
{------T@XX1.ProcessAppMsg}
function T@XX1.ProcessAppMsg(var Message: TMsg): Boolean;
begin
  ProcessAppMsg := ProcessAccels(Message) or ProcessDlgMsg(Message);
end;

@ZZ11
var
  App : T@XX1;
begin
  App.Init('@XX2');
  App.Run;
  App.Done;
end.
