我的备忘录包含两行文字,如
aaaa : dsfdsfdsffsf bbbbbbbbb : fgdfgff
我想在同一行中得到“:” - 一个在另一个之下,如
aaaa :dsfsfd bbbbbbbb :ghjghjgjhjg
我使用delphi和代码。
memo.lines.add(some_string + ' : ' + some_string);
我尝试使用SetLength
但现在不用。
答案 0 :(得分:4)
将备忘录的字体设置为等宽字体,如Courier New
。这样,每个字符的宽度都相同,您可以使用它来对齐文本或在备忘录中显示ASCII艺术。
或者,您可以使用listview或stringgrid,它支持在列中显示文本。为了您的目的,这可能是更好的选择。
如果您决定坚持使用备忘录,那么除了设置字体之外,您还必须在冒号之前使所有字符串具有相同的宽度。您可以使用简单的填充功能。在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);
答案 1 :(得分: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
要在TMemo
内发布此输出,您必须选择monospaced font。
更好的选择是使用包含2列的网格。
答案 2 :(得分:0)
我猜你必须在所有行上迭代两次:首先要知道“:”之前字符串的最大长度。然后你必须进行处理才能使“:”单独移动。对于第二次迭代,在其他回复中使用前面所示的一种方法。