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 >
Wrap
Pascal/Delphi Source File
|
1994-11-12
|
5KB
|
209 lines
Unit OFileWin;
{ Unité définissant une fenêtre de visualisation de fichier texte. }
{ KB mai 1994 }
INTERFACE
Uses Dos,
UImprim,UDrivers,
OFText,
OGenView,OTxtView;
Const
erFile=2;
Type
PFileWin=^TFileWin;
TFileWin=object(TWindow)
Fichier:PTextFile;
Ligne1:LongInt;
Marge:Integer;
Constructor Init(xi,yi,xf,yf:Byte;NomFichier:PathStr);
Destructor Done;virtual;
Function GetErrorMsg:String;virtual;
Procedure HandleEvent(Var Event:TEvent);virtual;
Procedure EcrireLigne(i:Byte);
Procedure DrawInterior;virtual;
Procedure Scroll(x,y:integer);
Function Trouve(S:String):Boolean;
Procedure Imprime;
End;
Implementation
{ Objet TFileWin }
Constructor TFileWin.Init(xi,yi,xf,yf:Byte;NomFichier:PathStr);
Var D:DirStr;
N:NameStr;
E:ExtStr;
Begin
TWindow.Init(xi,yi,xf,yf,'');
Ident:='TEXTWIN';
Fichier:=new(PTextFile,Init(NomFichier,16*1024));
if not Fichier^.IsValid
then begin
ErrorFlag:=erFile;
exit;
end;
FSplit(FExpand(Nomfichier),D,N,E);
Titre:=N+E;
Ligne1:=0;
Marge:=1;
End;
Destructor TFileWin.Done;
Begin
dispose(Fichier,Done);
TWindow.Done;
End;
Function TFileWin.GetErrorMsg:String;
Begin
if ErrorFlag=erFile
then GetErrorMsg:=Fichier^.GetErrorMsg
else GetErrorMsg:=TWindow.GetErrorMsg;
End;
Procedure TFileWin.EcrireLigne(i:Byte);
Var S:String;
Begin
with Fichier^ do
begin
if not EndOfFile
then S:=GetLine
else S:='';
end;
if length(S)>Marge
then s:=copy(s,Marge,length(s)-Marge+1)
else s:='';
Ajuste(S,Largeur);
Ecrire(S,1,i,0);
End;
Procedure TFileWin.DrawInterior;
Var n:byte;
Begin
Fichier^.SetFilePosit(Ligne1);
for n:=1 to Hauteur do
EcrireLigne(n);
End;
Procedure TFileWin.Scroll(x,y:integer);
Begin
if x<>0 { déplacement horizontal }
then begin
Marge:=Marge+x;
if Marge>Largeur then Marge:=Largeur;
if Marge<1 then Marge:=1;
end;
if (y>0) and not Fichier^.EndOfFile { déplacement vertical vers la fin du texte }
then begin
Fichier^.SetFilePosit(Ligne1);
while y>0 do
begin
Fichier^.GoToNextLine;
dec(y);
end;
Ligne1:=Fichier^.GetFilePosit;
end;
if (y<0) and (Ligne1<>0) { déplacement vertical vers le début du texte }
then begin
Fichier^.SetFilePosit(Ligne1);
while y<0 do
begin
Fichier^.GoToPrevLine;
inc(y);
end;
Ligne1:=Fichier^.GetFilePosit;
end;
End;
Procedure TFileWin.HandleEvent(Var Event:TEvent);
Var k:byte;
P:TPoint;
Begin
TWindow.HandleEvent(Event);
case Event.What of
evMouseAuto:
begin
MakeGlobal(Origin,P);
if Event.LButton and SurCadre(Event.Where)
then begin
if Event.Where.Y>P.Y+hauteur div 2
then scroll(0,1)
else scroll(0,-1);
end;
end;
evKeyDown:
case Event.KeyCode of
csdn:scroll(0,1);
csup:scroll(0,-1);
pgdn:scroll(0,Hauteur);
pgup:scroll(0,-Hauteur);
csrg:scroll(1,0);
cslf:scroll(-1,0);
home:Marge:=1;
cpgup: Ligne1:=0;
cpgdn: begin
Fichier^.SetEndPosit;
for k:=1 to Hauteur do Fichier^.GoToPrevLine;
Ligne1:=Fichier^.GetFilePosit;
end;
else exit;
end;
else exit;
end;
DrawInterior;
Event.What:=evNothing;
End;
Function TFileWin.Trouve(S:String):Boolean;
Var ok:Boolean;
Begin
with Fichier^ do
begin
SetFilePosit(Ligne1);
GoToNextLine;
ok:=Search(S);
end;
if ok
then begin
Ligne1:=Fichier^.GetFilePosit;
Trouve:=true;
end
else Trouve:=false;
End;
Procedure TFileWin.Imprime;
Var UneLigne: string; {Une ligne de texte lue}
k:byte;
oldpos:LongInt;
Begin
if PrintErrorFlag<>0 then Exit;
with Fichier^ do
PrintFileName:=FDir+FName+FExt;
with PrinterFormat do
begin
Titre:=Fichier^.FName+Fichier^.FExt;
for k:=1 to length(Titre) do Titre[k]:=UpCase(Titre[k]);
Date:=true;
end;
StartPrint;
oldpos:=Fichier^.GetFilePosit;
Fichier^.SetFilePosit(0);
While not Fichier^.EndOfFile do
begin
UneLigne:=Fichier^.GetLine;
PrintStr(UneLigne);
NewLine;
StartLine;
end;
EndPrint;
Fichier^.SetFilePosit(oldpos);
End;
END.
{ Fin du fichier OFileWin.Pas }