Hola a todos,
Estoy creando una clase usando como base lazreport para que me genere listados al vuelo. Para calcular el ancho y alto del texto utilizo los siguientes m�todos:
function TListado.FontTextWidth(aText: string; aFont: TFont): integer;
var
TempBMP: TBitmap;
begin
TempBMP:=TBitmap.Create;
try
TempBMP.Canvas.Font.Assign(aFont);
Result:=TempBMP.Canvas.TextWidth(aText);
finally
TempBMP.Free;
end;
end;
function TListado.FontTextHeight(aText: string; aFont: TFont): integer;
var
TempBMP: TBitmap;
begin
TempBMP:=TBitmap.Create;
try
TempBMP.Canvas.Font.Assign(aFont);
Result:=TempBMP.Canvas.TextHeight(aText);
finally
TempBMP.Free;
end;
end;Siendo el parametro afont el mismo que le asigno a los componentes TfrMemoView. Pero al usar el ancho y el alto calculado no se ve correctamente.
Para que se vea correctamente debo modificar los m�todos anteriores y hacerlo asi:
function TListado.FontTextWidth(aText: string; aFont: TFont): integer;
var
TempBMP: TBitmap;
begin
TempBMP:=TBitmap.Create;
try
TempBMP.Canvas.Font.Assign(aFont);
Result:=TempBMP.Canvas.TextWidth(aText)+2; //A�ado 2 al ancho
finally
TempBMP.Free;
end;
end;
function TListado.FontTextHeight(aText: string; aFont: TFont): integer;
var
TempBMP: TBitmap;
begin
TempBMP:=TBitmap.Create;
try
TempBMP.Canvas.Font.Assign(aFont);
Result:=TempBMP.Canvas.TextHeight(aText);
//Si el tama�o del texto es mayor que 8
if aFont.Size>8 then
begin
//Esta formula es resultado de varias pruebas (y errores)
Result:=Result+((aFont.Size-8) div 2);
end;
finally
TempBMP.Free;
end;
end;Uso Lazarus en Windows XP, alguna sugerencia de como lazreport usas las coordenadasd y medidas pues despues de leer la documentacion (de freereport) que dice que todo es en pixeles pero no coincide el resultado esperado con los calculos realizados.
Si os es necesario os adjunto la unidad con el c�digo completo.
Un cordial saludo y gracias anticipadas.
