Contributor: SERGEY PEREVOZNIK
{
 Since I received the request I post the following TOT (TechnoJock) snippet.
 The object in the code below is a window with progress bar.
 The object is very simple so I didn't comment the source.
 I did include an example.
 Here we go :
}
 {==========================================================================}
 {= Unit name : TotPro =}
 {= Version : 1.0 =}
 {= Public Objects : ProcessOBJ =}
 {===--------------------------------------------------------------------===}
 {= Programmer : Sergey Perevoznik =}
 { root@pcb.chernigov.ua }
 {= Language : Borland Pascal 7.0 =}
 {===--------------------------------------------------------------------===}
Unit TotPro;
Interface
Uses
TotStr,
TotFast,
TotWin;
Type
 ProcessOBJ = object
 vWinPtr : WinPtr;
 ScaleSym : char;
 DoneSym : char;
 ScaleCol : byte;
 DoneCol : byte;
 OneStep : real;
 CountCycle : longint;
 ScaleLen : byte;
 OldX : byte;
 InitVal,
 DoneVal : longInt;
 Currentpercent : byte;
 Constructor Init(InitValue, EndValue : longint;
 Title : string);
 Procedure SetScale(ScaleSymbol,
 DoneSymbol : char;
 ScaleColor,
 DoneColor : byte);
 Procedure Run;
 Procedure UpDate;
 Destructor Done;
 end;
Implementation
Function FillCh(Sym:Char;L:Byte):String; Assembler;
ASM
 PUSH DS
 LES DI,@Result
 XOR CX,CX
 MOV CL,L
 CMP CL,0
 MOV AL,CL
 STOSB
 MOV CL,AL
 JE @@1
 MOV AL,SYM
 CLD
 REP STOSB
@@1:
 POP DS
end;
 Constructor ProcessOBJ.Init(InitValue, EndValue : longint;
 Title : string);
 begin
 New(vWinPtr,Init);
 vWinPtr^.SetTitle(Title);
 vWinPtr^.SetSize(15,8,65,12,2);
 vWinPtr^.SetColors(70,ドル70,ドル70,ドル70ドル);
 ScaleSym := 'ー';
 DoneSym := 'ロ';
 ScaleCol := 07ドル;
 DoneCol := 70ドル;
 OldX := 2;
 initVal := InitValue;
 DoneVal := EndValue;
 CurrentPercent := 0;
 CountCycle := 0;
 end;
 Procedure ProcessOBJ.SetScale(ScaleSymbol,
 DoneSymbol : char;
 ScaleColor,
 DoneColor : byte);
 begin
 ScaleSym := ScaleSymbol;
 DoneSym := DoneSymbol;
 ScaleCol := ScaleColor;
 DoneCol := DoneColor;
 end;
 Procedure ProcessOBJ.Run;
 begin
 vWinPtr^.Draw;
 ScaleLen := vWinPtr^.vBorder.X2 - vWinPtr^.vBorder.X1 - 8;
 Screen.WriteAT(2,2,ScaleCol,FillCh(ScaleSym,ScaleLen));
 OneStep := (DoneVal - Initval) / 100;
 end;
 Procedure ProcessOBJ.Update;
 var
 Cp1 : byte;
 begin
 Inc(CountCycle);
 Cp1 := Round(CountCycle/OneStep);
 if Cp1> CurrentPercent then CurrentPercent := Cp1;
 Screen.WriteAT(2,2,DoneCol,FillCH(DoneSym,trunc(CurrentPercent*ScaleLen/100)));
 Screen.WriteAT(vWinPtr^.vBorder.X2 - vWinPtr^.vBorder.X1- 5,2,
 DoneCol,intTostr(CurrentPercent) + '%');
 end;
 Destructor ProcessOBJ.Done;
 begin
 Dispose(vWinPtr,done);
 end;
end.
{
Program Example;
Uses TotPro,
 TotFast,
 CRT;
Var
 Process : ProcessOBJ;
 I : integer;
begin
 ClrScr;
 Screen.CursOFF;
 Process.Init(0,80,'TOT Process Example');
 Process.Run;
 For I := 1 to 80 do
 begin
 Process.Update;
 Delay(30);
 end;
 Process.Done;
 Screen.CursON;
end.
}


AltStyle によって変換されたページ (->オリジナル) /