要求:
1、首字自动两个空格
2、每个回车自动换一行
3、去掉多余的空格和回车,使memo中只留下排版过的文字。
Var
i, aLine, LineJ, lineK: Integer;
tmpWideStr: WideString;
tmpStr: String;
aStrList: TStringList;
Begin
aStrList := TStringList.Create;
aStrList.Text := Memo1.Lines.Text;
aLine := aStrList.count;
For i := aLine - 1 Downto 0 Do
Begin
tmpWideStr := Trim(aStrList.Strings[i]); //前后空格
tmpStr := Trim(aStrList.Strings[i]); //前后空格
tmpStr := StringReplace(tmpStr, ' ', '', [rfReplaceAll]); //全角空格
tmpStr := StringReplace(tmpStr, #9, '', [rfReplaceAll]); //TAB
If tmpStr <> '' Then
Begin
For LineJ := 1 To Length(tmpWideStr) Do
Begin //从前往后去空
If (tmpWideStr[LineJ] <> ' ' {全角空格})
And (tmpWideStr[LineJ] <> #9 {TAB}) Then
Begin
For lineK := Length(tmpWideStr) Downto 1 Do
Begin //从后往前去空
If (tmpWideStr[LineJ] <> ' ' {全角空格})
And (tmpWideStr[LineJ] <> #9 {TAB}) Then
Begin
aStrList.Strings[i] := ' ' + Copy(tmpWideStr, LineJ, lineK - lineJ + 1);
Break;
End;
End;
Break;
End;
End;
End
Else
{tmpWideStr = ''} aStrList.Delete(i);
End;
aLine := aStrList.count;
For i := aLine - 1 Downto 1 Do
Begin //每一段落加一空行 以便阅读
aStrList.Insert(i, '');
End;
Memo1.Lines.Text := aStrList.Text;
Memo1.Repaint;
aStrList.Free;
End;