home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 19
/
CD_ASCQ_19_010295.iso
/
dos
/
prg
/
pas
/
ktools
/
source
/
ochamp.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-10-31
|
3KB
|
133 lines
Unit OChamp;
{ Unité définissant un champ d'édition d'une ligne. }
{ Il s'agit d'un champ abstrait qui nécessite une procédure d'affichage. }
{ K.B. mai-novembre 1994 }
{$IFDEF debug}
{$A+,B-,D+,E-,F-,I+,L+,N-,R+,S+,V-,W+,X+}
{$ELSE}
{$A+,B-,D-,E-,F-,I+,L-,N-,R-,S-,V-,W+,X+}
{$ENDIF}
INTERFACE
Uses UDrivers;
Type
PChamp=^TChamp;
TChamp=object
Txt:String; { contenu d'édition }
MaxLen:Byte; { longueur maxi de la réponse }
ScrLen:Byte; { longueur maxi d'affichage }
XStr:Byte; { position dans la chaine }
XScr:Byte; { position à l'écran }
Col1:Byte; { 1er caractère affiché }
Constructor Init(S:String;MLStr,MLScr:Byte);
{ S donne le contenu initial du champ }
Destructor Done;virtual;
Procedure Avance;
Procedure Recule;
Function Exec(code:Word):Word;
{ répond à la frappe de la touche code }
Function GetDrawString:String;
{ renvoie la chaine à afficher }
Function Renvoi:String;
End;
IMPLEMENTATION
{ objet TChamp }
Constructor TChamp.Init(S:String;MLStr,MLScr:Byte);
{ S donne le contenu initial du champ }
Begin
Txt:=S;
MaxLen:=MLStr;
ScrLen:=MLScr;
if length(Txt)>MaxLen
then Txt[0]:=chr(MaxLen);
Col1:=1;
XScr:=1;
XStr:=1;
while XStr<=length(Txt) do Avance;
End;
Destructor TChamp.Done;
Begin
End;
Procedure TChamp.Avance;
Begin
if XStr>length(Txt)
then exit;
inc(XStr);
if XStr-Col1+1>ScrLen
then inc(Col1)
else inc(XScr);
End;
Procedure TChamp.Recule;
Begin
if XStr=1
then exit;
dec(XStr);
if XStr<Col1
then dec(Col1)
else dec(XScr);
End;
Function TChamp.Exec(code:Word):Word;
Var r:Word;
Begin
r:=0;
case code of
Echap: begin
Txt:='';
r:=Echap;
end;
Ret: r:=Ret;
CsRg: Avance;
CsLf: Recule;
Home: begin
Col1:=1;
XStr:=1;
XScr:=1;
end;
Fin: while XStr<=length(Txt)
do Avance;
Suppr: if XStr<=length(Txt)
then system.delete(Txt,XStr,1);
BSP: if XStr>1
then begin
Recule;
system.delete(Txt,XStr,1);
end;
32..255: if length(Txt)<MaxLen
then begin
system.insert(chr(code),Txt,XStr);
Avance;
end;
end;
Exec:=r;
End;
Function TChamp.GetDrawString:String;
Var S:String;
Begin
S:=copy(Txt,Col1,length(Txt)-col1+1);
if length(S)>ScrLen
then S[0]:=chr(ScrLen)
else while length(S)<ScrLen
do S:=S+' ';
GetDrawString:=S;
End;
Function TChamp.Renvoi:String;
Begin
Renvoi:=Txt;
End;
END.
{ Fin du fichier OChamp.Pas }