现在的位置: 首页 > 综合 > 正文

memo如何自动排版?

2017年12月02日 ⁄ 综合 ⁄ 共 1442字 ⁄ 字号 评论关闭

要求:
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;

本文出处 http://bbs.2ccc.com/topic.asp?topicid=401125

抱歉!评论已关闭.