22 Votos

Delphi/Lazarus: Determinar TextWidth y TextHeight sin Canvas

Pregunta de Invitado | Última actualización el 21/07/2022 | Creado el 01/05/2022

Me gustaría determinar el ancho y la altura para una fuente, respectivamente, para un tamaño de fuente específico (TextWidth y TextHeight) sin tener un Canvas disponible.

Por ejemplo, un Button (TButton) no tiene un Canvas. Entonces, ¿Cómo debo trabajar con eso? ¿Alguien tiene un truco para eso?

ResponderPositivoNegativo
2Mejor Respuesta2 Votos

Cuando me enfrento a ese problema, creo un Bitmap dentro de la función en la que puedo procesar mis mediciones. Después del procesamiento, puedo eliminar (free) este Bitmap en caso de que ya no lo necesite.

Aquí hay una función para obtener el ancho (TextWidth) de una fuente:

function GetTextWidth(AText: string): integer;
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Canvas.Font.Assign(self.Font);
    result := bmp.Canvas.TextWidth(AText);
  finally
    bmp.Free;
  end;
end;

Y aquí hay una función para obtener la altura (TextHeight):

function GetTextHeight(AText: string): integer;
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Canvas.Font.Assign(self.Font);
    result := bmp.Canvas.TextHeight(AText);
  finally
    bmp.Free;
  end;
end;

En ambas funciones, estamos tomando la fuente de Form1, pero, por supuesto, también es posible usar y establecer cualquier otra fuente en bmp.Canvas.Font dentro de la función. Por ejemplo, así:

function GetTextWidth(AText, AFontName: string; 
  AFontSize: integer): integer;
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Canvas.Font.Name := AFont;
    bmp.Canvas.Font.Size := AFontSize;
    result := bmp.Canvas.TextWidth(AText);
  finally
    bmp.Free;
  end;
end;

En esta función, también podemos pasar el nombre de la fuente, así como el tamaño de la fuente como parámetro.

Sin embargo, si solo desea establecer el tamaño de un Button, también puede hacerlo configurando la propiedad AutoSize en TRUE. Si este es el caso, el botón se ajusta automáticamente al texto que contiene.
Última actualización el 21/07/2022 | Creado el 01/05/2022

ResponderPositivo Negativo
Responder

Temas Relacionados

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.