[Back to OOP SWAG index] [Back to Main SWAG index] [Original]
{
The following program demonstrates one technique for placing
two dialogs on the screen at the same time in a Turbo Vision
application. The key to this process is to make the first
dialog a modeless dialog, and then the second can be either
modal or modeless, depending on your needs. In this case,
the second dialog is modal.
When a modal dialog is on the screen, the user must close it
before getting access to the other features in an application.
For instance, a user cannot use the main programs menu while
modal dialog is on the screen. This is not true of modeless
dialogs. Modal dialogs are started with ExecView or ExecDialog.
Modeless dialogs are "Inserted" into the desktop.
}
{$X+}
Program TwoDlgs;
Uses
App,
Dialogs,
Drivers,
Menus,
MsgBox,
Views,
Objects;
const
cmDialogBox = 101;
cmPress2 = 102;
type
Consistency = (Solid, Runny, Melted);
Cheese = (None, Hvarti, Tilset, Jarlsberg);
PTrainDialog = ^TTrainDialog;
TTrainDialog = Object(TDialog)
constructor Init(Bounds: TRect; ATitle: String);
procedure HandleEvent(var Event: TEvent); virtual;
procedure Press2;
end;
TMyApp = Object(TApplication)
constructor Init;
procedure InitMenuBar; virtual;
procedure InitStatusLine; virtual;
procedure HandleEvent(var Event: TEvent); virtual;
procedure DialogBox;
end;
constructor TTrainDialog.Init(Bounds: TRect; ATitle: String);
var
R: TRect;
Control: PView;
begin
TDialog.Init(Bounds, ATitle);
R.Assign(2, (Bounds.B.Y - Bounds.A.Y) - 12,
(Bounds.B.X - Bounds.A.X) - 2,
(Bounds.B.Y - Bounds.A.Y) - 3);
Insert(New(PButton, Init(R, 'Click Here',
cmPress2, bfNormal)));
end;
procedure TTrainDialog.HandleEvent(var Event: TEvent);
begin
TDialog.HandleEvent(Event);
if Event.What = EvCommand then begin
case Event.Command of
cmPress2: Press2;
else Exit;
end;
ClearEvent(Event);
end;
end;
procedure TTrainDialog.Press2;
var
D: PDialog;
R: TRect;
Control: Word;
begin
R.Assign(48,3,74,14);
D := New(PDialog, Init(R, 'Another Dialog'));
R.Assign(4, 2, 22, 10);
D^.Insert(New(PButton, Init(R, 'Click To Close',
cmOk, bfDefault)));
Control := DeskTop^.ExecView(D);
Dispose(D, Done);
end;
constructor TMyApp.Init;
var
R: TRect;
begin
TApplication.Init;
end;
procedure TMyApp.HandleEvent(var Event: TEvent);
begin
TApplication.HandleEvent(Event);
if Event.What = EvCommand then begin
case Event.Command of
cmDialogBox: DialogBox;
else
Exit;
end;
ClearEvent(Event);
end;
end;
procedure TMyApp.InitMenuBar;
var
R: TRect;
begin
GetExtent(R);
R.B.Y := R.A.Y + 1;
MenuBar := New(PMenuBar, Init(R, NewMenu(
NewSubMenu('~F~ile', hcNoContext, NewMenu(
NewItem('~D~ialogs', 'Alt-D', kbAltD,
cmDialogBox, hcNoContext,
NewLine(
NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext,
nil)))),
nil))
));
end;
procedure TMyApp.InitStatusLine;
var R: TRect;
begin
GetExtent(R);
R.A.Y := R.B.Y - 1;
StatusLine := New(PStatusLine, Init(R,
NewStatusDef(0, $FFFF,
NewStatusKey('', kbF10, cmMenu,
NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit,
NewStatusKey('~Alt-D~ Dialog', kbAltD, cmDialogBox,
NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose,
nil)))),
nil)
));
end;
procedure TMyApp.DialogBox;
var
R: TRect;
D: PDialog;
Control: Word;
begin
R.Assign(20,5,60,21);
D := New(PTrainDialog, Init(R, 'Training Dialog'));
DeskTop^.Insert(D);
end;
var
A: TMyApp;
begin
A.Init;
A.Run;
A.Done;
end.
[Back to OOP SWAG index] [Back to Main SWAG index] [Original]