String 备忘录中字符串的长度

String 备忘录中字符串的长度,string,delphi,tmemo,String,Delphi,Tmemo,我有两行文字的备忘录,如 aaaa : dsfdsfdsffsf bbbbbbbbb : fgdfgff 我试图使用SetLength,但现在不知道如何使用。将备忘录的字体设置为单间距字体,如Courier New。这样,每个字符的宽度都相同,您可以使用它来对齐文本或在备忘录中显示ASCII艺术 或者,您可以使用listview或stringgrid,它们支持在列中显示文本。出于您的目的,这可能是更好的选择 如果您决定坚持使用备注,那么除了设置字体外,还必须使冒号前的所有字符串具有相同的宽度。

我有两行文字的备忘录,如

aaaa : dsfdsfdsffsf bbbbbbbbb : fgdfgff
我试图使用
SetLength
,但现在不知道如何使用。

将备忘录的字体设置为单间距字体,如
Courier New
。这样,每个字符的宽度都相同,您可以使用它来对齐文本或在备忘录中显示ASCII艺术

或者,您可以使用listview或stringgrid,它们支持在列中显示文本。出于您的目的,这可能是更好的选择

如果您决定坚持使用备注,那么除了设置字体外,还必须使冒号前的所有字符串具有相同的宽度。您可以使用一个简单的填充函数。下面给出了一个很好的例子:


设置可以使用的字符串的格式

控制台中的输出将是

aaaa : dsfsfd bbbbbbbbbb : ghjghjgjhjg aaaa:dsfsfd bbbbbbbb:ghjghjjjjg 要在
TMemo
中发布此输出,必须选择一个


更好的选择是使用具有2列的轴网

我猜您必须在所有行上迭代两次:首先要知道“:”之前字符串的最大长度。然后您必须进行处理,以使“:”单独移位。对于第二次迭代,使用前面在其他回复中显示的一种方法。

您最好使用网格,因为这实际上与备忘录无关,只与字符串有关。这是一个非常琐碎的问题。@Jerrydoge我想你误解了这个问题。文本显示在备忘录中(或至少在可见控件中)是一个非常重要的细节。
memo.lines.add(some_string + ' : ' + some_string);
function RightPad(S: string; Ch: Char; Len: Integer): string;
var
  RestLen: Integer;
begin
  Result  := S;
  RestLen := Len - Length(s);
  if RestLen < 1 then Exit;
  Result := StringOfChar(Ch, RestLen) + S;
end;
Memo.Lines.Add(RightPad('some_string', ' ', 20) + ':' + some_string);
procedure Output( const AStr1, AStr2 : string; AWidth : Integer );
begin
  Writeln( Format( '%-*.*s : %s', [AWidth, AWidth, AStr1, AStr2] ) );
end;

procedure Main;
begin
  Output( 'aaaa', 'dsfdsfdsffsf', 9 );
  Output( 'bbbbbbbbb', 'fgdfgff', 9 );
end;
aaaa : dsfsfd bbbbbbbbbb : ghjghjgjhjg