home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / 555 / M85 / TVEXT.PAS < prev   
Pascal/Delphi Source File  |  1993-10-07  |  6KB  |  250 lines

  1. UNIT TVExt;
  2.  
  3. {$X+}
  4.  
  5. INTERFACE
  6.  
  7. Uses Objects,Drivers,Dialogs,Views;
  8.  
  9. CONST
  10.   NomMois  : Array[1..12] Of String[9] =
  11.            ('Janvier','Février','Mars','Avril','Mai','Juin','Juillet',
  12.             'Août','Septembre','Octobre','Novembre','Décembre');
  13.   NomJour  : Array[1..7] Of String[12] =
  14.            ('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche');
  15.   cmClockUpDate = 1000;
  16.   cmClockSearch = 1001;
  17.  
  18. Type
  19.   PInputByte = ^TInputByte;
  20.   TInputByte = Object(TInputLine)
  21.                  constructor Init(var Bounds : TRect);
  22.                  function    DataSize : Word;  Virtual;
  23.                  Procedure   GetData(var Rec); Virtual;
  24.                  Procedure   SetData(var Rec); Virtual;
  25.                End;
  26.   PInputWord = ^TInputWord;
  27.   TInputWord = Object(TInputLine)
  28.                  constructor Init(var Bounds : TRect);
  29.                  function    DataSize : Word;  Virtual;
  30.                  Procedure   GetData(var Rec); Virtual;
  31.                  Procedure   SetData(var Rec); Virtual;
  32.                End;
  33.   PClock     = ^TClock;
  34.   TClock     = Object(TWindow)
  35.                  Heure,Min,Sec,Sec100 : Word;
  36.                  Annee,Mois,Quant,Jour : Word;
  37.                  Constructor Init(Bounds : TRect);
  38.                  Procedure   HandleEvent(Var Event : TEvent); Virtual;
  39.                End;
  40.   PStatus    = ^TStatus;
  41.   TStatus    = Object(TView)
  42.                  Status : PString;
  43.                  Constructor Init(Bounds : TRect ; eStatus : PString);
  44.                  Procedure   Draw; Virtual;
  45.                End;
  46.  
  47. Function Confirmation(S : String ; h : Byte) : Word;
  48. Procedure Information(S : String ; h : Byte);
  49.  
  50. IMPLEMENTATION
  51.  
  52. Uses App,Dos;
  53.  
  54. {****** TStatus ******}
  55.  
  56. Constructor TStatus.Init(Bounds : TRect ; eStatus : PString);
  57. Begin
  58.   TView.Init(Bounds);
  59.   Status:=eStatus;
  60. End;
  61.  
  62. Procedure TStatus.Draw;
  63. Var B : TDrawBuffer;
  64.     C : Byte;
  65. Begin
  66.   C:=GetColor(1);
  67.   MoveChar(B,' ',C,Size.X);
  68.   MoveStr(B,Status^,C);
  69.   WriteLine(0,0,Size.X,1,B);
  70. End;
  71.  
  72. {****** TClock *******}
  73.  
  74. Type
  75.   PClockInt = ^TClockInt;
  76.   TClockInt = Object(TView)
  77.                 Pere : PClock;
  78.                 Constructor Init(Bounds : TRect ; ePere : PClock);
  79.                 Procedure Draw;                            Virtual;
  80.               End;
  81.  
  82. Constructor TClockInt.Init(Bounds : TRect ; ePere : PClock);
  83. Begin
  84.   TView.Init(Bounds);
  85.   Pere:=ePere;
  86.   GrowMode:=gfGrowHiX+gfGrowHiY;
  87.   Options:=Options OR ofFramed;
  88. End;
  89.  
  90. Procedure TClockInt.Draw;
  91. Var S,T : String;
  92.     C,I : Byte;
  93.     B   : TDrawBuffer;
  94.   Function Zero(n : Byte) : String;
  95.   Var S : String[2];
  96.   Begin
  97.     S[0]:=#2;
  98.     S[1]:=Chr((n div 10)+48);
  99.     S[2]:=Chr((n mod 10)+48);
  100.     Zero:=S;
  101.   End;
  102. Begin
  103.   C:=GetColor(1);
  104.   For I:=0 to Size.Y-1 do
  105.   Begin
  106.     S:='';
  107.     If I=(Size.Y div 2)-1 Then
  108.     Begin
  109.       S:=NomJour[Pere^.Jour];
  110.       Str(Pere^.Quant,T);
  111.       If Pere^.Quant=1 Then T:='1er';
  112.       S:=S+' '+T+' '+NomMois[Pere^.Mois]+' ';
  113.       Str(Pere^.Annee,T);
  114.       S:=S+T;
  115.     End;
  116.     If I=(Size.Y Div 2)+1 Then
  117.     Begin
  118.       Str(Pere^.Heure:2,S);
  119.       S:=S+':'+Zero(Pere^.Min)+' '+Zero(Pere^.Sec);
  120.     End;
  121.     FillChar(T,SizeOf(T),32);
  122.     S:=Copy(S,1,Size.X);
  123.     T[0]:=Chr((Size.X-Length(S)) div 2);
  124.     S:=T+S;
  125.     MoveChar(B,' ',C,Size.X);
  126.     MoveStr(B,S,C);
  127.     WriteLine(0,I,Size.X,1,B);
  128.   End;
  129. End;
  130.  
  131. Procedure TClock.HandleEvent(Var Event : TEvent);
  132. Var H,M,S,S100 : Word;
  133.     A,Mo,Q,J   : Word;
  134.     Modif      : Boolean;
  135. Begin
  136.   TWindow.HandleEvent(Event);
  137.   If Event.What=evBroadCast Then
  138.   Begin
  139.     Case Event.Command Of
  140.       cmClockUpDate :
  141.         Begin
  142.           Modif:=FALSE;
  143.           GetTime(H,M,S,S100);
  144.           GetDate(A,Mo,Q,J);
  145.           If S<>Sec       Then Begin Sec:=S;       Modif:=TRUE; End;
  146.           If M<>Min       Then Begin Min:=M;       Modif:=TRUE; End;
  147.           If H<>Heure     Then Begin Heure:=H;     Modif:=TRUE; End;
  148.           If J<>Jour      Then Begin Jour:=J;      Modif:=TRUE; End;
  149.           If Q<>Quant     Then Begin Quant:=Q;     Modif:=TRUE; End;
  150.           If Mo<>Mois     Then Begin Mois:=Mo;     Modif:=TRUE; End;
  151.           If A<>Annee     Then Begin Annee:=A;     Modif:=TRUE; End;
  152.           if Modif Then ReDraw;
  153.         End;
  154.       cmClockSearch : ;
  155.     Else
  156.       Exit;
  157.     End;
  158.     ClearEvent(Event);
  159.   End;
  160. End;
  161.  
  162. Constructor TClock.Init(Bounds : TRect);
  163. Begin
  164.   TWindow.Init(Bounds,'Horloge',0);
  165.   GetTime(Heure,Min,Sec,Sec100);
  166.   GetDate(Annee,Mois,Quant,Jour);
  167.   GetClipRect(Bounds);
  168.   Bounds.Grow(-1,-1);
  169.   Insert(New(PClockInt,Init(Bounds,@Self)));
  170. End;
  171.  
  172. {******* TInputByte ******}
  173.  
  174. Constructor TInputByte.Init(var Bounds : TRect);
  175. Begin
  176.   TInputLine.Init(Bounds,3);
  177. End;
  178.  
  179. Function TInputByte.DataSize : Word;
  180. Begin
  181.   DataSize:=1;
  182. End;
  183.  
  184. Procedure TInputByte.GetData(var Rec);
  185. Var e,r : Integer;
  186. Begin
  187.   Val(Data^,e,r);
  188.   byte(Rec):=byte(e);
  189. End;
  190.  
  191. Procedure TInputByte.SetData(var Rec);
  192. Var a : Byte;
  193. Begin
  194.   a:=Byte(Rec);
  195.   Str(a:3,Data^);
  196. End;
  197.  
  198. Constructor TInputWord.Init(var Bounds : TRect);
  199. Begin
  200.   TInputLine.Init(Bounds,5);
  201. End;
  202.  
  203. Function TInputWord.DataSize : Word;
  204. Begin
  205.   DataSize:=2;
  206. End;
  207.  
  208. Procedure TInputWord.GetData(var Rec);
  209. Var e,r : Integer;
  210. Begin
  211.   Val(Data^,e,r);
  212.   Word(Rec):=Word(e);
  213. End;
  214.  
  215. Procedure TInputWord.SetData(var Rec);
  216. Var a : Word;
  217. Begin
  218.   a:=Word(Rec);
  219.   Str(a:5,Data^);
  220. End;
  221.  
  222. Function Confirmation(S : String ; h : Byte) : Word;
  223. Var D : PDialog;
  224.     R : TRect;
  225. Begin
  226.   R.Assign(5,2,5+50,2+h+5);
  227.   D:=New(PDialog,Init(R,'Confirmation'));
  228.   R.Assign(2,1,49,1+h);
  229.   D^.Insert(New(PStaticText,Init(R,S)));
  230.   R.Assign(37,2+h,48,4+h);
  231.   D^.Insert(New(PButton,Init(R,'Annuler',cmCancel,bfNormal)));
  232.   R.Assign(27,2+h,37,4+h);
  233.   D^.Insert(New(PButton,Init(R,'OK',cmOK,bfDefault)));
  234.   Confirmation:=DeskTop^.ExecView(D);
  235. End;
  236.  
  237. Procedure Information(S : String ; h : Byte);
  238. Var D : PDialog;
  239.     R : TRect;
  240. Begin
  241.   R.Assign(5,2,5+50,2+h+5);
  242.   D:=New(PDialog,Init(R,'Information'));
  243.   R.Assign(2,1,49,1+h);
  244.   D^.Insert(New(PStaticText,Init(R,S)));
  245.   R.Assign(19,2+h,29,4+h);
  246.   D^.Insert(New(PButton,Init(R,'OK',cmOK,bfDefault)));
  247.   DeskTop^.ExecView(D);
  248. End;
  249.  
  250. END.