想对一个多行的文本进行排版,要进行字符串的对齐操作,现想把如下格式的字符串:
The first line is your name
The second line is address
where are you born? BeiJing变成
The first line is                   your name
The second line                     is address
where are you born?                 BeiJing注意,yourname、is address、BeiJing这些要对齐的我想在它们的前边加入不定量的空格来实现对齐,但是如下
FinishedArray[k]:=NewArray[i]+SpaceNum*#9+NewArray[i+1];
是不合法的,不能用一个变量去乘一个空格,我试过,40*#9、40*' ',都不行
请问怎么才能在其中加入数量不定的空格而让它们对齐呢?

解决方案 »

  1.   

    实在要加空格也行用length把每一行的长度算出来
      

  2.   

    是的,我算出来了现在遇到的问题是怎么能把空格给加进去,我加10*' '和10*#9 也不好使啊报不可以用表达式没有加进去我不太想加tab,因为加入的空格不一定是8的整数倍,所以不想再多进行处理只要能实现对齐就行朋友帮我想想办法
      

  3.   

    自己写个获得空格的函数传入倍数
    var
     I:Integer;
     s:string;
    begom
    s:='';
    for i:=0 to 10 do
    begin
      s:=s+' ';
    end;
    end;
      

  4.   

    直接把字符串前面copy出来,然后+'    '(长度是变的)
    函数就用楼上吧
      

  5.   

    function getSpace(j:integer):string;
    var
     I:Integer;
     s:string;
    begin
    s:='';
    for i:=0 to 10 do
    begin
      s:=s+' ';
    end;
    result:=s;
    end;
      

  6.   

    楼上的朋友,你说的思路和我的一样可是我没做出来长度是变的,难道不能用一个变量去乘一个空格吗?这样不就是多个空格了吗?如果写个获取空格的函数,返回值不也是一个整数吗?那用ReturnValu*' '和一个变量去乘一个空格有什么区别吗?
      

  7.   

    楼上的朋友,你说的思路和我的一样可是我没做出来长度是变的,难道不能用一个变量去乘一个空格吗?这样不就是多个空格了吗?如果写个获取空格的函数,返回值不也是一个整数吗?那用ReturnValu*' '和一个变量去乘一个空格有什么区别吗?
      

  8.   

    刚才发贴卡了一下,楼上的朋友们你们动作可真快啊我字打完你们就写出来了那个变量j是不是就是想要插入的空格数目啊?for i:=0 to j do 
    ...
    ...
      

  9.   

    使用 Format 函数
      Memo1.Lines.Add(Format('%-30s%s',['aaa','bbb']));
      Memo1.Lines.Add(Format('%-30s%s',['aaaaaaa','bbbbbb']));
      Memo1.Lines.Add(Format('%-30s%s',['aaaaaaaaaa','bbbbbbbbb']));
    注意一些字体的空格和字母大小是不一样的,即使字符数一致,仍然不会对齐;这种情况下请选择宋体,中文=两个半角英文字符=两个半角空格。
      

  10.   

    感谢楼上的xxmmmx的提醒我现在以经把文本处理完毕了,把格式定固定后全部存入了一个一维字符数组里边现在就是让这个一维数组在memo上显示的问题了
      

  11.   

    for i:=0 to FinishedArray.counte-1 do
    memo1.lines.add(FinishedArray[i])
      

  12.   

    我不太懂,看看这个函数能不能帮上忙:StringOfChar
    S := StringOfChar(' ', N);  //产生空格 
      

  13.   

    定义一个字符串常量,用的时候截取const cSpaceString = '                                                               ';FinishedArray[k]:=NewArray[i]+Copy(cSpaceString, 1, SpaceNum)+NewArray[i+1]; 
      

  14.   

    或者这样都用你去算长度的,假设补好空格后的“The first line is                   ”的长度是20const cSpaceString =  '                                                                '; 
    FinishedArray[k]:=Copy(NewArray[i] + cSpaceString, 1, 20) + NewArray[i+1];  
     
     
      

  15.   

    或者这样都不用你去算长度的,假设补好空格后的“The first line is                   ”的长度是20 const cSpaceString =   '                                                                 ';  
    FinishedArray[k]:=Copy(NewArray[i] + cSpaceString, 1, 20) + NewArray[i+1];   
      

  16.   

    var a1,a2,a3:string;
    begin
    a1:='The first line is your name';
    a2:='The second line is address';
    a3:='where are you born? BeiJing';
    insert(a1,'    ',8);  
    insert(a2,'    ',10); 
    insert(a3,'    ',13);
    memo1.lines.add(a1);
    memo1.lines.add(a2);
    memo1.lines.add(a3);
    end; 
    end.