technologies systems software mexico empresa diesel brasil autopartes delphi

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.