[Back to TEXTEDIT SWAG index] [Back to Main SWAG index] [Original]
{
BT>Hello All...
BT> Ok once again I have reached a brick wall in my program... What I
BT>was trying to do, was to make Word Wrap actully work... Turns out I was
BT>barking up the wrong tree... If you have examples on how to do this... Th
BT>please reply
BT>and let me know...
What I'm about to describe assumes you either have a loop of
procedure/function that'll read in one line as it works on a line by
line basis.... What I've always done (for wordwrap) is when entering a
line, it stores each character into a holding string that'll contain the
final line, you also have a string that contains the wrapped text, if
the user presses space, you clear the string holding the wrapped text,
and if they reach the end of the line, you erase as many characters as
the length of the string holding the wrapped text...
Example (untested):
(uses the CRT unit)
}
Procedure GetLineWithWrap(var Line,Wrap: String);
Const Cr=#13;
BS=#8;
EraseChar=#8+#32+#8;
Var HoldLine,HoldWrap: String;
Ch: Char;
Count: Byte;
Begin
HoldWrap:='';
HoldLine:='';
if length(line)<>0 then begin
HoldLine:=Line;
Write(Line) end;
Repeat
While not keypressed do;
Ch:=Readkey;
If WhereX=80 and then begin
For Count:=1 to Length(HoldWrap) Write(EraseChar);
HoldLine:=Copy(HoldLine,1,Length(HoldLine)-Length(HoldWrap)-1);
Line:=HoldLine;
If Ch=#32 then Wrap:='' else Wrap:=HoldWrap+ch;
Exit End;
Case Ch of
#13 : {nothing, but don't want it added to the line};
#8 : If length(HoldLine)>0 then begin
Write(EraseChar);
If Length(HoldLine)>1 then
HoldLine:=Copy(HoldLine,1,Length(HoldLine)-1)
else HoldLine:='';
If Length(HoldWrap)>1 then
HoldWrap:=Copy(HoldWrap,1,Length(HoldWrap)-1)
else HoldWrap:='';
End;
#32 : Begin
HoldLine:=HoldLine+' ';
HoldWrap:='' end;
Else HoldLine:=HoldLine+Ch End;
Until Ch=#13;
Line:=HoldLine;
Wrap:='';
End;
[Back to TEXTEDIT SWAG index] [Back to Main SWAG index] [Original]