[Back to OOP SWAG index]  [Back to Main SWAG index]  [Original]

{
> I got a problem here. This procedure below ,derived from Tapplication, is
> just idling. It won't do the command assigned to Pbutton. There's something
> missing (I'm new with programming in Turbo Vision). The only things it does
> it's to show my button and close my window back. The commands are defined
> in > the HandleEvent of the Tapplication. My objective is to be able to
> open a new > PDialog on top of this one by the command selected.

Your problem is the way you are implementing your dialog. There is no
handleevent method to handle the events of the buttons. Create a tdialog
and fully define and flesh it out, and then execute it from the application.
}

Program ButtonTester; {Tested}
Uses App,Objects,Drivers,Views,Dialogs,msgbox;
Type
   SelDialog = Object(TDialog)
                 Constructor Init(var bounds:TRect;ATitle:TTitleStr);
                 Procedure HandleEvent(var Event:TEvent); virtual;
               end;
   SelDialogPtr = ^SelDialog;
Const
  cmCD_Roms      = 100;
  cmDiskets      = 101;
  cmHard_drive   = 102;
  cmMemory       = 103;

Constructor SelDialog.Init(var bounds:TRect;ATitle:TTitleStr);
   var r : trect;
   Begin
     inherited init(Bounds,ATitle);
     getextent(r); r.grow(-2,-2); r.b.y := r.a.y + 2;
     insert(new(PButton,init(r,'~C~D Roms',cmCD_Roms,bfnormal)));
     inc(r.a.y,2); inc(r.b.y,2);
     insert(new(PButton,init(r,'~D~iskettes',cmDiskets,bfnormal)));
     inc(r.a.y,2); inc(r.b.y,2);
     insert(new(PButton,init(r,'~H~ard Drives',cmHard_Drive,bfnormal)));
     inc(r.a.y,2); inc(r.b.y,2);
     insert(new(PButton,init(r,'~M~emory',cmMemory,bfnormal)));
  End;
Procedure SelDialog.HandleEvent(var Event:TEvent);
   Begin
     inherited HandleEvent(Event);
     if   (event.what = evcommand) and
          (event.command in [cmCD_Roms,cmDiskets,cmHard_Drive,cmMemory])
     then EndModal(event.command);
   End;

Type
  MyApp = Object(TApplication)
            procedure run; virtual;
            function GetSelection:word;
          end;

Function MyApp.GetSelection:Word;
   var p:SelDialogPtr;
       r:Trect;
   Begin
     r.assign(0,0,30,11);
     new(p,init(r,'Select [esc to quit]'));
     p^.options := p^.options or ofCentered;
     if   p <> nil
     then begin
            GetSelection := ExecView(p);
            dispose(p,done);
          end
     else GetSelection := 0;
   End;

Procedure MyApp.Run;
   var w   :word;
       stop:boolean;
   Begin
     stop := false;
     Repeat
       w := GetSelection;
       case w of
       cmCD_Roms    : messagebox(#3'Selected CD Roms',nil,mfokbutton);
       cmDiskets    : messagebox(#3'Selected Diskettes',nil,mfokbutton);
       cmHard_drive : messagebox(#3'Selected Hard Drives',nil,mfokbutton);
       cmMemory     : messagebox(#3'Selected Memory',nil,mfokbutton);
       else stop := true;
      end;
    Until Stop;
  End;

Var mApp : MyApp;
    m   : Longint;
Begin
  m := memavail;
  with mApp do begin init; run; done; end;
  if m <> memavail then writeln('heap ''a trouble');
End.

[Back to OOP SWAG index]  [Back to Main SWAG index]  [Original]