delphi - systems - Calcular el tamaño necesario para un TLabel
delphi technologies (4)
Puede usar el método TCanvas.TextRect, junto con los indicadores tfCalcRect y tfWordBreak:
var
lRect : TRect;
lText : string;
begin
lRect.Left := 0;
lRect.Right := myWidth;
lRect.Top := 0;
lRect.Bottom := 0;
lText := myLabel.Caption;
myLabel.Canvas.TextRect(
{var} lRect, //will be modified to fit the text dimensions
{var} lText, //not modified, unless you use the "tfModifyingString" flag
[tfCalcRect, tfWordBreak] //flags to say "compute text dimensions with line breaks"
);
ASSERT( lRect.Top = 0 ); //this shouldn''t have moved
myLabel.Height := lRect.Bottom;
end;
TCanvas.TextRect
ajusta una llamada a la función DrawTextEx
desde la API de Windows.
Los tfCalcRect
y tfWordBreak
son envoltorios delphi para los valores DT_CALCRECT
y DT_WORDBREAK
de la API de Windows. Puede encontrar información detallada sobre sus efectos en la documentación de msdn en msdn
Ok, aquí está el problema. Tengo un componente de etiqueta en un panel. La etiqueta se alinea como alClient y tiene habilitado el ajuste de texto. El texto puede variar de una línea a varias líneas. Me gustaría cambiar el tamaño de la altura del panel (y la etiqueta) para que se ajuste a todo el texto.
¿Cómo obtengo la altura necesaria de una etiqueta cuando conozco el texto y el ancho del panel?
Puedes usar una línea de código para esto:
label.width := label.canvas.textwidth(label.caption);
o puede establecer la propiedad de tamaño automático de la etiqueta en verdadero en el inspector de objetos.
Si puede alinearlo hasta arriba y mantener el tamaño automático activado, entonces TLabel ajustará automáticamente la altura después de establecer el título.
Utilice TextWidth y TextHeight.
Vea un ejemplo aquí: http://www.greatis.com/delphicb/tips/lib/fonts-widthheight.html
TextWidth le dirá qué tan ancho sería el texto, y luego puede dividir eso por el ancho del control para ver cuántas filas necesita. El resto de la división debe ser una fila adicional.