[Lazarus-es] Ancho en caracteres en lazreport
Antonio Évora
aevorar en gmail.com
Lun Oct 3 15:47:35 CEST 2011
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.
More information about the Lazarus-es
mailing list