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




(10)

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?


Answers

La plataforma de manera agnóstica sería 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html

Escribir ('Hola' + sLineBreak + '¡Mundo!');


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

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


A veces no quiero saturar mi espacio de código, especialmente para una etiqueta estática. Para simplemente definirlo con el formulario, ingrese el texto de la etiqueta en el formulario, luego haga clic con el botón secundario en cualquier lugar del mismo formulario. Elija "Ver como texto". Ahora verá todos los objetos como diseñados, pero solo como texto. Desplácese hacia abajo o busque su texto. Cuando lo encuentre, edite el título, por lo que se ve algo así como:

Leyenda = 'Línea 1' # 13 'Línea 2' # 13 'Línea 3'

# 13 significa un ordinal 13 o ascii para el retorno del 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 está entre comillas simples.

Una vez que haya terminado, haga clic una vez más y seleccione "Ver como formulario". Ahora puede hacer cualquier formateo como negrita, justificación derecha, etc. Simplemente no puede volver a editar el texto en el formulario o perderá los saltos de línea.

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

Dave


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

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

ShowMessage('Hello'+Chr(10)+'World');

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

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

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


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í)

Por lo tanto, si desea realizar su ajuste TLabel, 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.


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

Label1.Caption := Memo1.Lines.Text;

Y obtendrás tu etiqueta multilínea ...


 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;

Para hacer lo que la mayoría de las personas querría, cree un marcador de posición que no sea un carácter real de corte de línea. Entonces puedes combinar los enfoques para:

REPLACE(REPLACE(REPLACE(MyField, CHAR(13) + CHAR(10), 'something else'), CHAR(13), 'something else'), CHAR(10), 'something else')

De esta manera usted reemplaza una sola vez. El enfoque de:

REPLACE(REPLACE(MyField, CHAR(13), ''), CHAR(10), '')

Funciona muy bien si solo desea deshacerse de los caracteres CRLF, pero si desea un marcador de posición, como
O algo así, entonces el primer enfoque es un poco más preciso.





delphi newline