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?
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.
Aquí hay un enfoque aún más corto:
my_string := 'Hello,'#13#10' world!';
my_string := 'Hello,' + #13#10 + 'world!';
#13#10
son los caracteres CR / LF en decimal
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).
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 ...
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;
La forma agnóstica de la plataforma sería 'sLineBreak': http://www.freepascal.org/docs-html/rtl/system/slinebreak.html
Write ('Hola' + sLineBreak + '¡Mundo!');
ShowMessage('Hello'+Chr(10)+'World');
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.
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
fuente