Código Delphi
[-]
function FontWidth(const Fuente:TFont;const Texto:string):Integer;
var c:TCanvas;
h:HWND;
begin
try
c:= TCanvas.Create;
c.Handle := GetDeviceContext(h);
c.Font.Assign(Fuente);
Result := c.TextWidth(Texto);
finally
FreeAndNil(c);
end;
end;
function FontHeight(const Fuente:TFont;const Texto:string):Integer;
var c:TCanvas;
h:HWND;
begin
try
c:= TCanvas.Create;
c.Handle := GetDeviceContext(h);
c.Font.Assign(Fuente);
Result := c.TextHeight(Texto);
finally
FreeAndNil(c);
end;
end;
El objeto de este codigo, es que ultimamente por los foros veo mucho esta misma pregunta, por supuesto, si tenemos la propiedad Canvas a mano, pues consultamos los métodos TextWidth y TextHeight.
Si no tenemos el canvas.... pues lo creamos nosotros y punto. La verdad,
es excesivo crear un canvas, un handle y todos los recursos asociados para ver el tamaño de un string. Si se necesita para un string .... se llama a estas funciones y listo.
Si tenemos que hallar el ancho para varios strings, se debería crear el Canvas, el handle,
hacer el bucle necesario comprobando el tamaño de todos los string que tenemos y despues liberar el canvas.
Es decir: No abusemos de estas rutinas, retocarlas y meterlas en vuestro código, llamar a estas funciones dentro de un bucle es EXCESIVO.
Queda claro no?
Un saludo