Quero criar uma string que se estende por várias linhas para atribuir a uma propriedade Label Caption. Como isso é feito no Delphi?
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.
my_string := 'Hello,' + #13#10 + 'world!';
#13#10
são os caracteres CR / LF em decimal
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).
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 ...
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;
A forma agnóstica de plataforma seria 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html
Write ('Olá' + sLineBreak + 'Mundo!');
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.
À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
fonte