I'm trying to convert a component and I know I can use instead of TMetaFile and TMetaFileCanvas, follows the code.
procedure TiSoftPrinter.CriarFolha(Numero : integer; Folha : TMetaFile;ToPrint:boolean);
var
EA : integer;
Pagina : pPage;
Escritura : PEscritura;
Texto : TMetafile;
Ancho, Alto : Integer;
MargenIzquierdo, MargenSuperior : integer;
AltoDeLinha, AnchoDeColuna : double;
CantColunas : integer;
begin
if tpfComprimido in FastFont then
CantColunas := 140
else
CantColunas := 83;
if ToPrint then
begin
With TMetaFileCanvas.Create(Folha,0) do
try
Brush.Color := clWhite;
Folha.Width := PrintingWidth div 4;
Folha.Height := PrintingHeight div 4;
AnchoDeColuna := (Folha.Width)/CantColunas ;
AltoDeLinha := (Folha.Height)/Lines;
Font.Name := 'Courrier';
Font.Size := 10;
Font.Pitch := fpFixed;
Ancho := TextWidth('X');
Alto := TextHeight('X');
FillRect(Rect(0,0,(Folha.Width)-1,(Folha.Height-1)));
Pagina := StoragePages.Items[Numero-1];
For EA := 0 to Pagina^.Escritura.Count-1 do
begin
Escritura := Pagina^.Escritura.Items[EA];
if Escritura^.Y <= Lines then
begin
Texto := TMetaFile.Create;
Texto.Width := Ancho*Length(Escritura^.Texto);
Texto.Height := Alto;
With TMetaFileCanvas.Create(Texto,0) do
try
Font.Name := 'Courrier';
Font.Size := 10;
Font.Pitch := fpFixed;
if tpfNegrito in Escritura^.PrinterFont then
Font.Style := Font.Style + [fsBold]
else
Font.Style := Font.Style - [fsBold];
if tpfItalico in Escritura^.PrinterFont then
Font.Style := Font.Style + [fsItalic]
else
Font.Style := Font.Style - [fsItalic];
if tpfSublinhado in Escritura^.PrinterFont then
Font.Style := Font.Style + [fsUnderline]
else
Font.Style := Font.Style - [fsUnderline];
TextOut(0,0,Escritura^.Texto);
finally
Free
end;
if (tpfComprimido in Escritura^.PrinterFont) and not (tpfComprimido in FastFont) then
StretchDraw(rect(Round(AnchoDeColuna*(Escritura^.X-1)),Round(AltoDeLinha*(Escritura^.Y-1)),Round(AnchoDeColuna*(Escritura^.X-1)+Length(Escritura^.Texto)*Folha.Width/140),Round(AltoDeLinha*(Escritura^.Y))),Texto)
else
StretchDraw(rect(Round(AnchoDeColuna*(Escritura^.X-1)),Round(AltoDeLinha*(Escritura^.Y-1)),Round(AnchoDeColuna*(Escritura^.X+Length(Escritura^.Texto)-1)),Round(AltoDeLinha*(Escritura^.Y))),Texto);
Texto.Free;
end
end;
finally
Free;
end;
end
else
begin
With TMetaFileCanvas.Create(Folha,0) do
try
Brush.Color := clWhite;
//MargenIzquierdo := Round(GetDeviceCaps(Printer.Handle,PHYSICALOFFSETX) / GetDeviceCaps(Printer.Handle,LOGPIXELSX) * 80);
MargenIzquierdo := Round(Printer.PaperSize.PaperRect.WorkRect.Left / Printer.XDPI * 80);
MargenSuperior := Round(Printer.PaperSize.PaperRect.WorkRect.Top / Printer.YDPI * 80);
Folha.Width := Round(Printer.PaperSize.PaperRect.PhysicalRect.Right / Printer.XDPI * 80);
Folha.Height := Round(Printer.PaperSize.PaperRect.PhysicalRect.Bottom / Printer.YDPI * 80);
AnchoDeColuna := (Folha.Width-(2*MargenIzquierdo)) / CantColunas;
AltoDeLinha := (Folha.Height-(2*MargenSuperior))/Lines;
Font.Name := 'Courrier';
Font.Size := 10;
Font.Pitch := fpFixed;
Ancho := TextWidth('X');
Alto := TextHeight('X');
FillRect(Rect(0,0,(Folha.Width)-1,(Folha.Height)-1));
Pen.Color := clSilver;
Pen.Style := psDot;
if (MargenIzquierdo > 2) and (MargenSuperior > 2) then
Rectangle(MargenIzquierdo-2,MargenSuperior-2,Round(MargenIzquierdo+CantColunas*AnchoDeColuna)+2,Round(MargenSuperior+Lines*AltoDeLinha)+2)
else
begin
Rectangle(MargenIzquierdo,MargenSuperior,Round(MargenIzquierdo+CantColunas*AnchoDeColuna),Round(MargenSuperior+Lines*AltoDeLinha));
end;
Pen.Style := psSolid;
Pen.Color := clBlack;
Pagina := StoragePages.Items[Numero-1];
For EA := 0 to Pagina^.Escritura.Count-1 do
begin
Escritura := Pagina^.Escritura.Items[EA];
if Escritura^.Y <= Lines then
begin
Texto := TMetaFile.Create;
Texto.Width := Ancho*Length(Escritura^.Texto);
Texto.Height := Alto;
With TMetaFileCanvas.Create(Texto,0) do
try
Font.Name := 'Courrier';
Font.Size := 10;
Font.Pitch := fpFixed;
if tpfNegrito in Escritura^.PrinterFont then
Font.Style := Font.Style + [fsBold]
else
Font.Style := Font.Style - [fsBold];
if tpfItalico in Escritura^.PrinterFont then
Font.Style := Font.Style + [fsItalic]
else
Font.Style := Font.Style - [fsItalic];
if tpfSublinhado in Escritura^.PrinterFont then
Font.Style := Font.Style + [fsUnderline]
else
Font.Style := Font.Style - [fsUnderline];
TextOut(0,0,Escritura^.Texto);
finally
Free
end;
if (tpfComprimido in Escritura^.PrinterFont) and not (tpfComprimido in FastFont) then
begin
StretchDraw(rect(Round(MargenIzquierdo+AnchoDeColuna*(Escritura^.X)),
Round(MargenSuperior+AltoDeLinha*(Escritura^.Y-1)),
Round(MargenIzquierdo+AnchoDeColuna*(Escritura^.X)+Length(Escritura^.Texto)*Folha.Width/140),
Round(MargenSuperior+AltoDeLinha*(Escritura^.Y))),
Texto)
end
else
begin
StretchDraw(rect(Round(MargenIzquierdo+AnchoDeColuna*(Escritura^.X)),
Round(MargenSuperior+AltoDeLinha*(Escritura^.Y-1)),
Round(MargenIzquierdo+AnchoDeColuna*(Escritura^.X+Length(Escritura^.Texto))),
Round(MargenSuperior+AltoDeLinha*(Escritura^.Y))),
Texto);
end;
Texto.Free;
end
end;
finally
Free;
end;
end;
--
Edit: I put the source code in a code tag. (Vincent)