Ver Mensaje Individual
  #6  
Antiguo 26-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita