home *** CD-ROM | disk | FTP | other *** search
- {************************************************}
- { }
- { Turbo Vision File Manager Demo }
- { Copyright (c) 1992 by Borland International }
- { }
- {************************************************}
-
- unit Gauges;
-
- {$V-}
-
- interface
-
- uses Drivers, Objects, Views;
-
- const
- cmUpdateGauge = 12000;
- cmResetGauge = 12001;
- cmAddGauge = 12002;
-
- type
- PPercentGauge = ^TPercentGauge;
- TPercentGauge = object(TView)
- MaxValue: Longint;
- CurValue: Longint;
- constructor Init(var Bounds: TRect; AMaxValue: Longint);
- procedure Draw; virtual;
- procedure Update(Progress: Longint); virtual;
- procedure AddProgress(Progress: Longint);
- procedure HandleEvent(var Event: TEvent); virtual;
- function SolveForX(Y, Z: Longint): Integer;
- function SolveForY(X, Z: Longint): Integer;
- end;
-
- PBarGauge = ^TBarGauge;
- TBarGauge = object(TPercentGauge)
- procedure Draw; virtual;
- end;
-
- implementation
-
- constructor TPercentGauge.Init(var Bounds: TRect; AMaxValue: Longint);
- begin
- inherited Init(Bounds);
- EventMask := EventMask or evBroadcast;
- MaxValue := AMaxValue;
- CurValue := 0;
- end;
-
- procedure TPercentGauge.Draw;
- var
- B: TDrawBuffer;
- C: Word;
- S: string[10];
- PercentDone: Longint;
- begin
- C := GetColor(1);
- MoveChar(B, ' ', C, Size.X);
- PercentDone := SolveForY(CurValue, MaxValue);
- FormatStr(S, '%-3d%%', PercentDone);
- MoveStr(B, S, C);
- WriteLine(0,0,Size.X,Size.Y,B);
- end;
-
- procedure TPercentGauge.Update(Progress: Longint);
- begin
- CurValue := Progress;
- DrawView;
- end;
-
- procedure TPercentGauge.AddProgress(Progress: Longint);
- begin
- Update(Progress + CurValue);
- end;
-
- procedure TPercentGauge.HandleEvent(var Event: TEvent);
- begin
- inherited HandleEvent(Event);
- if Event.What = evBroadcast then
- begin
- case Event.Command of
- cmUpdateGauge :
- begin
- Update(Event.InfoLong);
- end;
- cmResetGauge:
- begin
- MaxValue := Event.InfoLong;
- Update(0);
- end;
- cmAddGauge:
- begin
- AddProgress(Event.InfoLong);
- end;
- end;
- end;
- end;
-
- { This function solves for x in the equation "x is y% of z". }
- function TPercentGauge.SolveForX(Y, Z: Longint): Integer;
- begin
- SolveForX := Trunc( Z * (Y * 0.01) );
- end;
-
- { This function solves for y in the equation "x is y% of z". }
- function TPercentGauge.SolveForY(X, Z: Longint): Integer;
- begin
- if Z = 0 then SolveForY := 0
- else SolveForY := Trunc( (X * 100) / Z );
- end;
-
-
- { TBarGauge }
- procedure TBarGauge.Draw;
- var
- B: TDrawBuffer;
- C: Word;
- PercentDone: Longint;
- FillSize: Integer;
- begin
- C := GetColor(1);
- MoveChar(B, #176, C, Size.X);
- PercentDone := SolveForY(CurValue, MaxValue);
- FillSize := SolveForX(PercentDone, Size.X);
- if FillSize > Size.X then FillSize := Size.X;
- MoveChar(B, #178, C, FillSize);
- WriteLine(0,0,Size.X,Size.Y,B);
- end;
-
- end.