Como faço para incluir um caractere de nova linha em uma string no Delphi?

97

Quero criar uma string que se estende por várias linhas para atribuir a uma propriedade Label Caption. Como isso é feito no Delphi?

Brendan
fonte

Respostas:

174

No System.pas (que é usado automaticamente), o seguinte é definido:

const
  sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF} 
               {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};

Isso é do Delphi 2009 (observe o uso de AnsiChar e AnsiString). (Quebra de linha adicionada por mim.)

Portanto, se você quiser que seu TLabel seja agrupado, certifique-se de que AutoSize esteja definido como true e use o seguinte código:

label1.Caption := 'Line one'+sLineBreak+'Line two';

Funciona em todas as versões do Delphi desde o lançamento do sLineBreak, que acredito ser o Delphi 6.

Jim McKeeth
fonte
33

Esta é uma abordagem ainda mais curta:

my_string := 'Hello,'#13#10' world!';
Zartog
fonte
15

my_string := 'Hello,' + #13#10 + 'world!';

#13#10 são os caracteres CR / LF em decimal

Brendan
fonte
8

Ou você pode usar o atalho ^ M + ^ J também. Tudo uma questão de preferência. os códigos "CTRL-CHAR" são traduzidos pelo compilador.

MyString := 'Hello,' + ^M + ^J + 'world!';

Você pode retirar o + entre ^ M e ^ J, mas então você receberá um aviso do compilador (mas ele ainda irá compilar bem).

Skamradt
fonte
7

Além disso, um truque que pode ser útil:
se você mantém suas múltiplas strings em uma TStrings, você só precisa usar a propriedade Text das TStrings como no exemplo a seguir.

Label1.Caption := Memo1.Lines.Text;

E você receberá seu rótulo multilinha ...

Francesca
fonte
3
var
  stlst: TStringList;
begin
  Label1.Caption := 'Hello,'+sLineBreak+'world!';

  Label2.Caption := 'Hello,'#13#10'world!';

  Label3.Caption := 'Hello,' + chr(13) + chr(10) + 'world!';

  stlst := TStringList.Create;
  stlst.Add('Hello,');
  stlst.Add('world!');
  Label4.Caption := stlst.Text;

  Label5.WordWrap := True; //Multi-line Caption
  Label5.Caption := 'Hello,'^M^J'world!';

  Label6.Caption := AdjustLineBreaks('Hello,'#10'world!');
  {http://delphi.about.com/library/rtl/blrtlAdjustLineBreaks.htm}
end;
Jessé Catrinck
fonte
0
ShowMessage('Hello'+Chr(10)+'World');
azulado
fonte
0

Não tenho uma cópia do Delphi em mãos, mas tenho quase certeza de que se você definir a propriedade wordwrap como true e a propriedade autosize como false, ela deve envolver qualquer texto que você colocar no tamanho do rótulo. Se você quiser quebrar uma linha em um determinado lugar , pode funcionar se você definir as configurações acima e colar de um editor de texto .

Espero que isto ajude.

Toby Allen
fonte
-2

Às vezes, não quero desordenar meu espaço de código, especialmente para um rótulo estático. Para defini-lo apenas com o formulário, insira o texto do rótulo no formulário e clique com o botão direito em qualquer lugar no mesmo formulário. Escolha "Exibir como texto". Agora você verá todos os objetos conforme projetados, mas apenas como texto. Role para baixo ou pesquise seu texto. Ao encontrá-lo, edite a legenda para que se pareça com:

Legenda = 'Linha 1' # 13'Linha 2 '# 13'Linha 3'

# 13 significa um ordinal 13 ou ascii para retorno de carro. Chr (13) é a mesma ideia, CHR () altera o número para um tipo ordinal.

Observe que não há ponto-e-vírgula nesta faceta particular do Delphi, e "=" é usado ao invés de ": =". O texto de cada linha é colocado entre aspas simples.

Quando terminar, clique com o botão direito mais uma vez e escolha "Exibir como formulário". Agora você pode fazer qualquer formatação, como negrito, justificar à direita, etc. Você simplesmente não pode reeditar o texto no formulário ou perderá as quebras de linha.

Também uso "Exibir como texto" para várias alterações, onde apenas desejo rolar e fazer substituições, etc. Rápido.

Dave

Dave Sonsalla
fonte
A resposta aceita é direta ao ponto, assim como a pergunta. Essa resposta, ao contrário, acrescenta mais do que foi perguntado; pior ainda: de uma forma não tão clara.
ranieribt
-2
 private
   { Private declarations }
   {declare a variable like this}
   NewLine : string; // ok
  // in next event handler assign a value to that variable (NewLine)
  // like the code down
procedure TMainForm.FormCreate(Sender: TObject);
begin`enter code here`
  NewLine := #10;
 {Next Code To show NewLine In action}
  //ShowMessage('Hello to programming with Delphi' + NewLine + 'Print New Lin now !!!!');
end;
boodyman 28
fonte
Formate seu código e adicione uma descrição de como isso resolve o problema.
Blastfurnace