Длина строки в записке
У меня есть заметка с текстом в 2 строки, как
аааа: dsfdsfdsffsf bbbbbbbbb: fgdfgff
Я хотел бы получить ":" в той же строке - один под другим, как
аааа:dsfsfd bbbbbbbb:ghjghjgjhjg
Я использую Delphi и код.
memo.lines.add(some_string + ' : ' + some_string);
Я пытался использовать SetLength
но не сейчас как.
3 ответа
Установите шрифт памятки в моноширинный шрифт, например 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);
Для форматирования строк вы можете использовать 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;
Вывод в консоль будет
аааа: dsfsfd bbbbbbbbbb: ghjghjgjhjg
Чтобы опубликовать этот вывод внутри TMemo
Вы должны выбрать моноширинный шрифт.
Лучшим вариантом является использование сетки с 2 столбцами.
Я предполагаю, что вам нужно выполнить итерацию дважды по всем строкам: сначала узнать максимальную длину строки перед ":". Затем вы должны выполнить обработку, чтобы сдвинуть ":" по отдельности. Для этой второй итерации используйте один подход, показанный ранее в других ответах.