[Back to OOP SWAG index] [Back to Main SWAG index] [Original]
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Program Name : MyPBDmo2.Pas
Written By : Brad Prendergast
E-Mail : mrealm@ici.net
Web Page : http://www.ici.net/cust_pages/mrealm/BANDP.HTM
Program
Compilation : Borland Turbo Pascal 7.0
Program Description :
This sample program displays the creation and usage of a progress box.
This progress box shows the percentage complete of a certain action.
This demonstration is a very basic application and is meant to be used as
an informative tool and built upon. The process can be terminated at any
time prior to reaching 100% by pressing ctrl-break. Please pardon the
lack of commenting, if you have any questions feel free to email me.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Program PBDemo2;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
{ These are the standard set of compiler directives I opt to use }
{$DEFINE DEBUG}
{$DEFINE Error_Checking}
{$IFDEF Error_Checking}
{$I+} {L I/O Checking }
{$Q+} {L Overflow Checking }
{$R+} {L Range Checking }
{$S+} {L Stack Overflow Checking }
{$ELSE}
{$I-} {L I/O Checking }
{$Q-} {L Overflow Checking }
{$R-} {L Range Checking }
{$S-} {L Stack Overflow Checking }
{$ENDIF}
{$UNDEF Error_Checking}
{$IFDEF DEBUG}
{$D+} {G Debug Information }
{$L+} {G Local Symbol Information }
{$Y+} {G Symbolic Reference Information }
{$ELSE}
{$D-} {G Debug Information }
{$L-} {G Local Symbol Information }
{$Y-} {G Symbolic Reference Information }
{$ENDIF}
{$A+} {G Align Data}
{$B-} {L Short Circuit Boolean Evaluation }
{$E-} {G Disable Emulation }
{$F+} {L Allow Far Calls }
{$G+} {G Generate 80286 Code }
{$N-} {G Disable Numeric Processing }
{$P+} {G Enable Open Parameters }
{$O+} {G Overlay }
{$T-} {G Type @ Operator }
{$V+} {L Var String Checking }
{$X+} {G Extended Syntax Enabled }
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
uses
Dialogs, App, Objects, Views, Drivers;
type
PMyDialog = ^TMyDialog;
TMyDialog = Object ( TDialog )
ondone,
onbreak : boolean;
displayline : PStaticText;
progress,
percentage,
total : longint;
status : word;
Constructor Init ( mdtitle : string; totaltodo : longint );
Function Update ( currperc : longint ) : word;
Procedure SetHitAnyKeyMode(mode : integer; enable : boolean);
Procedure HitAnyKey;
Procedure Draw; virtual;
end;
TMyApplication = Object (TApplication)
Constructor Init;
end;
var
mydemo : TMyApplication;
const
mdok = 0;
mddone = 1;
mdbreak =2;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Constructor TMyDialog.Init;
var
r : TRect;
p : PParamText;
begin
r.Assign(1,1,41,7);
Inherited Init ( r, mdtitle );
options := options + ofcentered;
GetExtent(R);
r.A.Y := 2;
r.B.Y := 3;
r.Grow(-1,0);
p := New(PParamText, Init(r, #3'%3d percent complete.',1));
p^.ParamList := @percentage;
displayline := p;
Insert(p);
total := totaltodo;
Update(0);
Desktop^.Insert(@self);
TDialog.Draw;
end;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Function TMyDialog.Update ( currperc : longint ):word;
var
event: TEvent;
c : char;
Begin
progress := currperc;
percentage := (progress*100) div total;
If Progress = Total then Status := mdDone
else if CtrlBreakHit then
begin
status := mdbreak;
CtrlBreakHit := False;
GetEvent(event);
end
else status := mdok;
DrawView;
If (Status = mdDone) and OnDone then HitAnyKey;
If (Status = mdBreak) and OnBreak then HitAnyKey;
Update := Status;
end;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Procedure TmyDialog.SetHitAnyKeyMode(mode: integer; enable: boolean);
begin
case mode of
mdBreak: OnBreak := enable;
mdDone : OnDone := enable;
end;
end;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Procedure TMyDialog.HitAnyKey;
var
event : TEvent;
begin
If (((Status=mdDone) and OnDone) or ((Status=mdBreak) and OnBreak)) then
repeat
GetEvent(Event)
until (Event.What <> evNothing);
end;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Procedure Tmydialog.Draw;
var
buf : TDrawBUffer;
r : TRect;
begin
GetExtent(r);
r.Grow(-1,-1);
r.A.Y := r.B.Y - 1;
Dec(r.B.X);
If Status = mdDone then MoveCStr(buf, ' Successful: ~Press Any Key~ ',$9F1F)
else
if Status = mdBreak then MoveCStr(buf, ' Cancelled: ~Press Any Key~ ',$9F1F)
else MoveStr(buf, ' Press Ctrl-Break to Cancel ',$1F);
displayline^.DrawView;
WriteLine(R.A.X, R.A.Y, R.B.X, 1, buf);
end;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Constructor TMyApplication.Init;
var
md : PMyDialog;
i : longint;
begin
Inherited Init;
i := 0;
md := New ( PMyDialog, Init ( 'Progress Demo', 50000));
md^.SetHitAnyKeyMode(mdBreak,true);
md^.SetHitAnyKeyMode(mdDone,true);
repeat
inc(i);
md^.Update(i);
until (md^.Status = mddone) or (md^.Status=mdBreak);
Dispose(md, done);
end;
begin
mydemo.Init;
mydemo.Run;
mydemo.Done;
end.
[Back to OOP SWAG index] [Back to Main SWAG index] [Original]