-1

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

aaaa : dsfdsfdsffsf
bbbbbbbbb : fgdfgff

我想在同一行中获得“:” - 一个在另一个下方,例如

aaa :dsfsfd
bbbbbbbb :ghjghjgjhjg

我使用delphi和代码。

memo.lines.add(some_string + ' : ' + some_string);

我尝试使用SetLength,但现在不知道如何使用。

4

3 回答 3

4

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

或者,您可以使用列表视图或字符串网格,它们支持在列中显示文本。出于您的目的,这可能是更好的选择。

如果您决定坚持使用备忘录,那么除了设置字体之外,您还必须使冒号之前的所有字符串具有相同的宽度。您可以为此使用简单的填充功能。SwissDelphiPages上给出了一个很好的例子:

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);
于 2014-05-06T21:12:56.430 回答
3

要格式化字符串,您可以使用System.SysUtils.Format

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

要在 a 中发布此输出,TMemo您必须选择等宽字体

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

于 2014-05-07T07:42:55.130 回答
0

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

于 2014-05-07T08:15:46.393 回答