Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Problema con TPrinterWin (https://www.clubdelphi.com/foros/showthread.php?t=91041)

jhonalone 29-10-2016 19:49:26

Problema con TPrinterWin
 
Hola compañeros de fatigas.
Digo de fatigas, porque yo estoy muy fatigado ya, vosotros quizás no.
Os cuento.
Tengo un procedimiento hecho en .... no sé, Delphi7, Delphi10...
Intento reutilizarlo para un nuevo programa multiplataforma en FMX.
Pero nunca he imprimido nada con FMX, y me está resultando imposible. Por éso os pido ayuda.
El procedimiento es este:

Código Delphi [-]
function IH(N:integer):integer;
var
   I:real;
begin
I:=GetDeviceCaps(Printer.Handle,Physicalwidth)/2481;

IH:=Round(i*N);

end;

function IV(N:integer):integer;
var
   I:real;
begin
I:=GetDeviceCaps(Printer.Handle,PhysicalHeight)/3507;

IV:=Round(i*N);

end;
procedure THojaDeRes.EditaHojaResp;
VAR
   XX,xy,pagina,linea,lon_1parte_contidio,lon_1parte_observa:INTEGER;
   p:PRegistro;

PROCEDURE  CABECERA;
BEGIN
pagina:=pagina+1;
with Printer.canvas
do begin
   rectangle(IH(0),IV(300),ih(Printer.PageWidth-15),iv(2700));
   MoveTo(ih(0),iv(400));
   LineTo(ih(Printer.PageWidth-15),iv(400));
   MOveTo(ih(120),iv(300));
   LineTo(ih(120),iv(2700));
   MOveTo(ih(240),iv(300));
   LineTo(ih(240),iv(2700));
   MOveTo(ih(360),iv(300));
   LineTo(ih(360),iv(2700));
   MOveTo(ih(580),iv(300));
   LineTo(ih(580),iv(2700));
   MOveTo(ih(975),iv(300));
   LineTo(ih(975),iv(2700));
   MOveTo(ih(1505),iv(300));
   LineTo(ih(1505),iv(2700));
   MOveTo(ih(1595),iv(300));
   LineTo(ih(1595),iv(2700));
   MOveTo(ih(1685),iv(300));
   LineTo(ih(1685),iv(2700));
   MOveTo(ih(1805),iv(300));
   LineTo(ih(1805),iv(2700));
   Font:=Pica.Font;
   TextOut(ih(390),iv(0),'Nombre:                                        Clave: '{+clave});
   Font:=Doble.Font;
   TextOut(ih(750),iv(130),'Hoja de Respuestas');
   Font:=Picanegra.Font;
   TextOut(ih(38),iv(325),'NL');
   TextOut(ih(133),iv(325),'T.R.');
   TextOut(ih(245),iv(325),'Nº P');
   TextOut(ih(365),iv(325),'Local+CE');
   TextOut(ih(585),iv(325),'Determ+CF   Par');
   TextOut(ih(980),iv(325),'Contenidos+C.Idiogr.');
   TextOut(ih(1513),iv(325),'Pop');
   TextOut(ih(1627),iv(325),'Z');
   TextOut(ih(1705),iv(325),'PNF');
   TextOut(ih(1810),iv(325),'Punt. Espec.+Observ.');

   Font:=Pica.Font;
   TextOut(ih(2200),iv(2750),'Pág:'+inttostr(pagina));
   end;
linea:=9;
END;

Estoy teniendo todos los problemas del mundo para adaptarlo.

Primero con GetDeviceCaps, pero esto está resuelto con la unidad WinApi.Windows

Después con el rectángulo, que creo que está resuelto con este código, pero no lo he podido probar todavía:

Código Delphi [-]
PROCEDURE  CABECERA;
var
MyRect:TrectF;
BEGIN
pagina:=pagina+1;


with Printer.canvas
do begin

   MyRect.Create(IH(0),IV(300),ih(Printer.PageWidth-15),iv(2700));
   DrawRect(MyRect, 0, 0, AllCorners, 100);
   //MoveTo(ih(0),iv(400));

Después creo que no se puede utilizar la función //MoveTo(ih(0),iv(400));

Y ya me he quedado atascado al intentar cambiar el Canvas.Font. Pues el compilador me dice que el Canvas.Font de TPrinterWin es una variable "read-only" y no se le puede asignar un valor.

¡Ah! Se me olvidaba comentaros que tampoco reconoce la función TextOut(ih(38),iv(325),'NL');

Llevo dos días enteros buscando y probando y no consigo resolverlo.

Agradezco cualquier información. Seguro que necesito aprender mucho todavía. Pero esto me corre un poco de prisa y no tengo tiempo.

Gracias de antemano.

jhonalone 29-10-2016 20:37:43

Bueno.
¡Un Pasito más!

El tema de los font es que no se pueden asignar de golpe, o sea .....font := .....font.
Hay que hacerlo detalladamente, así (no he probado, pero lo compila):
Código Delphi [-]
   Font.Size := Form1.Pica.Font.Size;
   Font.Family := Form1.Pica.Font.Family;
   Font.Style := Form1.Pica.Font.Style;

Sigo investigando mientras espero vuestra ayuda.
Saludos.


La franja horaria es GMT +2. Ahora son las 22:25:46.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi