2014-05-06 94 views
-1

字符串我有備忘錄,在2行文字像長度備忘錄

 
aaaa : dsfdsfdsffsf 
bbbbbbbbb : fgdfgff 

我想獲得「:」在同一行 - 一個低於其他類似

 
aaaa  :dsfsfd 
bbbbbbbb :ghjghjgjhjg 

我用delphi和代碼。

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

我試過用SetLength但現在不怎麼樣。

+2

你應該更好地使用該網格 –

+0

這真的沒有任何關於備忘錄,只是與字符串。這是非常微不足道的表演。 –

+0

@JerryDodge我認爲你誤解了這個問題。文本顯示在備忘錄中(或至少在可見控件中)是一個非常重要的細節。 – GolezTrol

回答

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); 
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列的網格。

0

我想你必須在所有行上迭代兩次:首先要知道「:」之前的字符串的最大長度。然後,您必須執行處理以便使「:」單獨移動。對於第二次迭代,在其他回覆中使用前面所示的一種方法。