home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / ktools / source / ofilewin.pas < prev    next >
Pascal/Delphi Source File  |  1994-11-12  |  5KB  |  209 lines

  1. Unit OFileWin;
  2. { Unité définissant une fenêtre de visualisation de fichier texte. }
  3. { KB mai 1994 }
  4.  
  5. INTERFACE
  6.  
  7. Uses Dos,
  8.      UImprim,UDrivers,
  9.      OFText,
  10.      OGenView,OTxtView;
  11.  
  12. Const
  13.  erFile=2;
  14.  
  15. Type
  16.  PFileWin=^TFileWin;
  17.  TFileWin=object(TWindow)
  18.   Fichier:PTextFile;
  19.   Ligne1:LongInt;
  20.   Marge:Integer;
  21.   Constructor Init(xi,yi,xf,yf:Byte;NomFichier:PathStr);
  22.   Destructor Done;virtual;
  23.   Function GetErrorMsg:String;virtual;
  24.   Procedure HandleEvent(Var Event:TEvent);virtual;
  25.   Procedure EcrireLigne(i:Byte);
  26.   Procedure DrawInterior;virtual;
  27.   Procedure Scroll(x,y:integer);
  28.   Function Trouve(S:String):Boolean;
  29.   Procedure Imprime;
  30.   End;
  31.  
  32. Implementation
  33.  
  34. { Objet TFileWin }
  35.  
  36. Constructor TFileWin.Init(xi,yi,xf,yf:Byte;NomFichier:PathStr);
  37. Var D:DirStr;
  38.     N:NameStr;
  39.     E:ExtStr;
  40. Begin
  41.  TWindow.Init(xi,yi,xf,yf,'');
  42.  Ident:='TEXTWIN';
  43.  Fichier:=new(PTextFile,Init(NomFichier,16*1024));
  44.  if not Fichier^.IsValid
  45.     then begin
  46.           ErrorFlag:=erFile;
  47.           exit;
  48.          end;
  49.  FSplit(FExpand(Nomfichier),D,N,E);
  50.  Titre:=N+E;
  51.  Ligne1:=0;
  52.  Marge:=1;
  53. End;
  54.  
  55. Destructor TFileWin.Done;
  56. Begin
  57.  dispose(Fichier,Done);
  58.  TWindow.Done;
  59. End;
  60.  
  61. Function TFileWin.GetErrorMsg:String;
  62. Begin
  63.  if ErrorFlag=erFile
  64.     then GetErrorMsg:=Fichier^.GetErrorMsg
  65.     else GetErrorMsg:=TWindow.GetErrorMsg;
  66. End;
  67.  
  68. Procedure TFileWin.EcrireLigne(i:Byte);
  69. Var S:String;
  70. Begin
  71.  with Fichier^ do
  72.   begin
  73.    if not EndOfFile
  74.       then S:=GetLine
  75.       else S:='';
  76.   end;
  77.  if length(S)>Marge
  78.     then s:=copy(s,Marge,length(s)-Marge+1)
  79.     else s:='';
  80.  Ajuste(S,Largeur);
  81.  Ecrire(S,1,i,0);
  82. End;
  83.  
  84. Procedure TFileWin.DrawInterior;
  85. Var n:byte;
  86. Begin
  87.  Fichier^.SetFilePosit(Ligne1);
  88.  for n:=1 to Hauteur do
  89.   EcrireLigne(n);
  90. End;
  91.  
  92. Procedure TFileWin.Scroll(x,y:integer);
  93. Begin
  94.  if x<>0  { déplacement horizontal }
  95.     then begin
  96.           Marge:=Marge+x;
  97.           if Marge>Largeur then Marge:=Largeur;
  98.           if Marge<1 then Marge:=1;
  99.          end;
  100.  if (y>0) and not Fichier^.EndOfFile { déplacement vertical vers la fin du texte }
  101.     then begin
  102.           Fichier^.SetFilePosit(Ligne1);
  103.           while y>0 do
  104.            begin
  105.             Fichier^.GoToNextLine;
  106.             dec(y);
  107.            end;
  108.           Ligne1:=Fichier^.GetFilePosit;
  109.          end;
  110.  if (y<0) and (Ligne1<>0)  { déplacement vertical vers le début du texte }
  111.     then begin
  112.           Fichier^.SetFilePosit(Ligne1);
  113.           while y<0 do
  114.            begin
  115.             Fichier^.GoToPrevLine;
  116.             inc(y);
  117.            end;
  118.           Ligne1:=Fichier^.GetFilePosit;
  119.          end;
  120. End;
  121.  
  122. Procedure TFileWin.HandleEvent(Var Event:TEvent);
  123. Var k:byte;
  124.     P:TPoint;
  125. Begin
  126.  TWindow.HandleEvent(Event);
  127.  case Event.What of
  128.   evMouseAuto:
  129.    begin
  130.     MakeGlobal(Origin,P);
  131.     if Event.LButton and SurCadre(Event.Where)
  132.        then begin
  133.              if Event.Where.Y>P.Y+hauteur div 2
  134.                 then scroll(0,1)
  135.                 else scroll(0,-1);
  136.             end;
  137.    end;
  138.   evKeyDown:
  139.    case Event.KeyCode of
  140.     csdn:scroll(0,1);
  141.     csup:scroll(0,-1);
  142.     pgdn:scroll(0,Hauteur);
  143.     pgup:scroll(0,-Hauteur);
  144.     csrg:scroll(1,0);
  145.     cslf:scroll(-1,0);
  146.     home:Marge:=1;
  147.     cpgup: Ligne1:=0;
  148.     cpgdn: begin
  149.             Fichier^.SetEndPosit;
  150.             for k:=1 to Hauteur do Fichier^.GoToPrevLine;
  151.             Ligne1:=Fichier^.GetFilePosit;
  152.            end;
  153.     else exit;
  154.    end;
  155.   else exit;
  156.   end;
  157.  DrawInterior;
  158.  Event.What:=evNothing;
  159. End;
  160.  
  161. Function TFileWin.Trouve(S:String):Boolean;
  162. Var ok:Boolean;
  163. Begin
  164.  with Fichier^ do
  165.   begin
  166.    SetFilePosit(Ligne1);
  167.    GoToNextLine;
  168.    ok:=Search(S);
  169.   end;
  170.  if ok
  171.     then begin
  172.           Ligne1:=Fichier^.GetFilePosit;
  173.           Trouve:=true;
  174.          end
  175.     else Trouve:=false;
  176. End;
  177.  
  178. Procedure TFileWin.Imprime;
  179. Var  UneLigne: string;                     {Une ligne de texte lue}
  180.      k:byte;
  181.      oldpos:LongInt;
  182. Begin
  183.  if PrintErrorFlag<>0 then Exit;
  184.  with Fichier^ do
  185.   PrintFileName:=FDir+FName+FExt;
  186.  with PrinterFormat do
  187.   begin
  188.    Titre:=Fichier^.FName+Fichier^.FExt;
  189.    for k:=1 to length(Titre) do Titre[k]:=UpCase(Titre[k]);
  190.    Date:=true;
  191.   end;
  192.  StartPrint;
  193.  oldpos:=Fichier^.GetFilePosit;
  194.  Fichier^.SetFilePosit(0);
  195.  While not Fichier^.EndOfFile  do
  196.   begin
  197.    UneLigne:=Fichier^.GetLine;
  198.    PrintStr(UneLigne);
  199.    NewLine;
  200.    StartLine;
  201.   end;
  202.  EndPrint;
  203.  Fichier^.SetFilePosit(oldpos);
  204. End;
  205.  
  206. END.
  207.  
  208. {                        Fin du fichier OFileWin.Pas                       }
  209.