¿Cómo incluyo un carácter de nueva línea en una cadena en Delphi?

97

Quiero crear una cadena que abarque varias líneas para asignar a una propiedad de título de etiqueta. ¿Cómo se hace esto en Delphi?

Brendan
fuente

Respuestas:

174

En System.pas (que se usa automáticamente) se define lo siguiente:

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

Esto es de Delphi 2009 (observe el uso de AnsiChar y AnsiString). (Ajuste de línea agregado por mí).

Entonces, si desea hacer que su TLabel se ajuste, asegúrese de que AutoSize esté configurado en verdadero y luego use el siguiente código:

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

Funciona en todas las versiones de Delphi desde que se introdujo sLineBreak, que creo que fue Delphi 6.

Jim McKeeth
fuente
33

Aquí hay un enfoque aún más corto:

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

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

#13#10 son los caracteres CR / LF en decimal

Brendan
fuente
8

O también puede usar el atajo ^ M + ^ J. Todo es cuestión de preferencias. los códigos "CTRL-CHAR" son traducidos por el compilador.

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

Puede quitar el + entre ^ M y ^ J, pero luego recibirá una advertencia del compilador (pero aún así se compilará bien).

skamradt
fuente
7

Por otro lado, un truco que puede ser útil:
si mantiene sus múltiples cadenas en un TStrings, solo tiene que usar la propiedad Text de TStrings como en el siguiente ejemplo.

Label1.Caption := Memo1.Lines.Text;

Y obtendrás tu etiqueta de varias líneas ...

Francesca
fuente
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
fuente
0
ShowMessage('Hello'+Chr(10)+'World');
azulado
fuente
0

No tengo una copia de Delphi a mano, pero estoy bastante seguro de que si establece la propiedad wordwrap en true y la propiedad de tamaño automático en false, debería envolver cualquier texto que ponga en el tamaño que hace la etiqueta. Si desea hacer un salto de línea en un lugar determinado , podría funcionar si establece la configuración anterior y la pega desde un editor de texto .

Espero que esto ayude.

Toby Allen
fuente
-2

A veces no quiero abarrotar mi espacio de código, especialmente para una etiqueta estática. Para tenerlo definido con el formulario, ingrese el texto de la etiqueta en el formulario, luego haga clic derecho en cualquier lugar del mismo formulario. Elija "Ver como texto". Ahora verá todos los objetos como se diseñaron, pero solo como texto. Desplácese hacia abajo o busque su texto. Cuando lo encuentre, edite el título, para que tenga un aspecto similar a:

Título = 'Línea 1' # 13'Línea 2 '# 13'Línea 3'

# 13 significa un ordinal 13, o ascii para retorno de carro. Chr (13) es la misma idea, CHR () cambia el número a un tipo ordinal.

Tenga en cuenta que no hay punto y coma en esta faceta particular de Delphi, y se usa "=" en lugar de ": =". El texto de cada línea se incluye entre comillas simples.

Una vez que haya terminado, haga clic derecho una vez más y elija "Ver como formulario". Ahora puede aplicar cualquier formato como negrita, justificar a la derecha, etc. No puede volver a editar el texto en el formulario o perderá los saltos de línea.

También utilizo "Ver como texto" para varios cambios en los que solo quiero desplazarme y hacer reemplazos, etc. Rápido.

Dave

Dave Sonsalla
fuente
La respuesta aceptada es directa al grano, al igual que la pregunta. Esta respuesta, por el contrario, agrega más de lo que se pidió; peor aún: de una manera no tan 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;
boodyman28
fuente
Formatee su código y agregue una descripción de cómo esto resuelve el problema.
Blastfurnace