Длина строки в записке

У меня есть заметка с текстом в 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 столбцами.

Я предполагаю, что вам нужно выполнить итерацию дважды по всем строкам: сначала узнать максимальную длину строки перед ":". Затем вы должны выполнить обработку, чтобы сдвинуть ":" по отдельности. Для этой второй итерации используйте один подход, показанный ранее в других ответах.

Другие вопросы по тегам