字符串我有備忘錄,在2行文字像長度備忘錄
aaaa : dsfdsfdsffsf bbbbbbbbb : fgdfgff
我想獲得「:」在同一行 - 一個低於其他類似
aaaa :dsfsfd bbbbbbbb :ghjghjgjhjg
我用delphi和代碼。
memo.lines.add(some_string + ' : ' + some_string);
我試過用SetLength
但現在不怎麼樣。
字符串我有備忘錄,在2行文字像長度備忘錄
aaaa : dsfdsfdsffsf bbbbbbbbb : fgdfgff
我想獲得「:」在同一行 - 一個低於其他類似
aaaa :dsfsfd bbbbbbbb :ghjghjgjhjg
我用delphi和代碼。
memo.lines.add(some_string + ' : ' + some_string);
我試過用SetLength
但現在不怎麼樣。
將備忘錄的字體設置爲像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);
要格式化字符串,你可以使用控制檯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列的網格。
我想你必須在所有行上迭代兩次:首先要知道「:」之前的字符串的最大長度。然後,您必須執行處理以便使「:」單獨移動。對於第二次迭代,在其他回覆中使用前面所示的一種方法。
你應該更好地使用該網格 –
這真的沒有任何關於備忘錄,只是與字符串。這是非常微不足道的表演。 –
@JerryDodge我認爲你誤解了這個問題。文本顯示在備忘錄中(或至少在可見控件中)是一個非常重要的細節。 – GolezTrol