PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Uso de winspool.drv con WD11
Uso de winspool.drv con WD11
Iniciado por Susana Juárez, 13,jun. 2008 16:38 - 1 respuesta
Publicado el 13,junio 2008 - 16:38
This is a multi-part message in MIME format.

------=_NextPart_000_0008_01C8CD60.90D5BBE0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hola de nuevo,

Necesito ayuda con urgencia para solucionar un problema con los formatos =
de papel de las impresoras. Nuestra aplicación incluye una ventana de =
configuración de impresión que permite al usuario escoger impresora, =
formato de papel y los márgenes a utilizar. Para cargar los formatos =
de papel (con sus correspondientes códigos) de cada impresora =
utilizamos un procedimiento que un compañero encontró hace mucho =
tiempo:

PROCEDURE FormatoPapel()

CI is int

TPAPER is array of 256 int

PAPER est un tableau de 256 chaînes ASCIIZ sur 64


NbBac is int

Nbpaper is int


NOMIMP est une chaîne ASCIIZ sur 32

NOMPORT est une chaîne ASCIIZ sur 32

impre is string = IMPRESORA[IMPRESORA]

PUERTO is string = ExtractString(INILit("Devices",impre),2,",")

//TPAPER incluirá los códigos correspondientes a los formatos de =
papel que admite la impresora

//Nbpaper contiene el nº de formatos de papel que admite la impresora

Nbpaper = CallDLL32("winspool.drv","DeviceCapabilitiesA" , =
&impre,&PUERTO,2,&TPAPER, 0)

ListDeleteAll("CODPAPEL")

FOR CI = 1 TO Nbpaper

ListAdd("CODPAPEL",TPAPER[CI])

END

Nbpaper = CallDLL32("winspool.drv","DeviceCapabilitiesA" , =
&impre,&PUERTO,16,&PAPER, 0) //PAPER incluirá los diferentes formatos =
de papel que admite la impresora

ListDeleteAll("PAPEL")

FOR CI = 1 TO Nbpaper

ListAdd("PAPEL",PAPER[CI])

END

Con WD 5.5 funciona perfectamente, pero ahora que hemos migrado a WD 11 =
los códigos de formato de papel que nos devuelve son unos números =
enormes para los primeros 93 formatos y cero para los siguientes. =
¿Alguien sabe cómo solucionar este problema?

Muchas gracias
------=_NextPart_000_0008_01C8CD60.90D5BBE0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; =
charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1605" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Arial size=2>Hola de nuevo,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Necesito ayuda con urgencia para =
solucionar un
problema con los formatos de papel de las impresoras. Nuestra =
aplicación incluye
una ventana de configuración de impresión que permite al usuario =
escoger
impresora, formato de papel y los márgenes a utilizar. Para cargar los =
formatos
de papel (con sus correspondientes códigos) de cada impresora =
utilizamos un
procedimiento que un compañero encontró hace mucho =
tiempo:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<P><FONT face=Arial size=2>PROCEDURE FormatoPapel()</FONT></P>
<P><FONT face=Arial size=2>CI is int</FONT></P>
<P><FONT face=Arial size=2>TPAPER is array of 256 int</FONT></P>
<P><FONT face=Arial size=2>PAPER est un tableau de 256 chaînes =
ASCIIZ sur
64</FONT></P>
<P><FONT face=Arial size=2></FONT></P>
<P><FONT face=Arial size=2>NbBac is int</FONT></P>
<P><FONT face=Arial size=2>Nbpaper is int</FONT></P>
<P><FONT face=Arial size=2></FONT></P>
<P><FONT face=Arial size=2>NOMIMP est une chaîne ASCIIZ sur =
32</FONT></P>
<P><FONT face=Arial size=2>NOMPORT est une chaîne ASCIIZ sur =
32</FONT></P>
<P><FONT face=Arial size=2>impre is string = =
IMPRESORA[IMPRESORA]</FONT></P>
<P><FONT face=Arial size=2>PUERTO is string =
ExtractString(INILit("Devices",impre),2,",")</FONT></P>
<P><FONT face=Arial size=2>//TPAPER incluirá los códigos =
correspondientes a los
formatos de papel que admite la impresora</FONT></P>
<P><FONT face=Arial size=2>//Nbpaper&nbsp;contiene el nº de =
formatos de papel
que admite la impresora</FONT></P>
<P><FONT face=Arial size=2>Nbpaper =
CallDLL32("winspool.drv","DeviceCapabilitiesA" ,
&amp;impre,&amp;PUERTO,2,&amp;TPAPER, 0)&nbsp;&nbsp; </FONT></P>
<P><FONT face=Arial size=2>ListDeleteAll("CODPAPEL")</FONT></P>
<P><FONT face=Arial size=2>FOR CI = 1 TO Nbpaper</FONT></P>
<P><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;
ListAdd("CODPAPEL",TPAPER[CI])</FONT></P>
<P><FONT face=Arial size=2>END</FONT></P>
<P><FONT face=Arial size=2>Nbpaper =
CallDLL32("winspool.drv","DeviceCapabilitiesA" ,
&amp;impre,&amp;PUERTO,16,&amp;PAPER, 0) //PAPER incluirá los =
diferentes
formatos de papel que admite la impresora</FONT></P>
<P><FONT face=Arial size=2>ListDeleteAll("PAPEL")</FONT></P>
<P><FONT face=Arial size=2>FOR CI = 1 TO Nbpaper</FONT></P>
<P><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;
ListAdd("PAPEL",PAPER[CI])</FONT></P>
<P><FONT face=Arial size=2>END</FONT></P>
<DIV><FONT face=Arial size=2>Con&nbsp;WD 5.5 funciona perfectamente, =
pero ahora
que hemos migrado a WD 11 los códigos de formato de papel que nos =
devuelve son
unos números enormes para los primeros 93 formatos y cero para los =
siguientes.
¿Alguien sabe cómo solucionar este problema?</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Muchas =
gracias</FONT></DIV></BODY></HTML>

------=_NextPart_000_0008_01C8CD60.90D5BBE0--
Publicado el 11,septiembre 2008 - 16:14
Susana Juárez wrote in news message <485265f6@news.pcsoft.fr>:

Hola de nuevo,

Necesito ayuda con urgencia para solucionar un problema con los formatos =
de papel de las impresoras. Nuestra aplicación incluye una ventana de =
configuración de impresión que permite al usuario escoger impresora, =
formato de papel y los márgenes a utilizar. Para cargar los formatos =
de papel (con sus correspondientes códigos) de cada impresora =
utilizamos un procedimiento que un compañero encontró hace mucho =
tiempo:

PROCEDURE FormatoPapel()

CI is int

TPAPER is array of 256 int

PAPER est un tableau de 256 chaînes ASCIIZ sur 64


NbBac is int

Nbpaper is int


NOMIMP est une chaîne ASCIIZ sur 32

NOMPORT est une chaîne ASCIIZ sur 32

impre is string = IMPRESORA[IMPRESORA]

PUERTO is string = ExtractString(INILit("Devices",impre),2,",")

//TPAPER incluirá los códigos correspondientes a los formatos de =
papel que admite la impresora

//Nbpaper contiene el nº de formatos de papel que admite la impresora

Nbpaper = CallDLL32("winspool.drv","DeviceCapabilitiesA" , =
&impre,&PUERTO,2,&TPAPER, 0)

ListDeleteAll("CODPAPEL")

FOR CI = 1 TO Nbpaper

ListAdd("CODPAPEL",TPAPER[CI])

END

Nbpaper = CallDLL32("winspool.drv","DeviceCapabilitiesA" , =
&impre,&PUERTO,16,&PAPER, 0) //PAPER incluirá los diferentes formatos =
de papel que admite la impresora

ListDeleteAll("PAPEL")

FOR CI = 1 TO Nbpaper

ListAdd("PAPEL",PAPER[CI])

END

Con WD 5.5 funciona perfectamente, pero ahora que hemos migrado a WD 11 =
los códigos de formato de papel que nos devuelve son unos números =
enormes para los primeros 93 formatos y cero para los siguientes. =
¿Alguien sabe cómo solucionar este problema?

Muchas gracias



Hola, más vale tarde que nunca, asi que aqui tienes la solución.

El codigo es correcto excepto en una cosa, los genios que hicieron el cambio de windev 5.5 a versiones superiores, decidieron cambiar los formatos de los tipos basicos de datos, y mientras que en 5.5 un integer era un entero de 2 bytes, en 7.5 y superiores es un entero de 8 bytes.

Las APIs son muy expecificas con los tipos, por lo que el fallo esta en la declaracion del array pasado a la API, ya que el tamaño del tipo integer ya no es valido al migrar de una versión a otra.

> TPAPER is array of 256 int

Lo correcto para que funcione en 7.5 o superior, es

TPAPER is array of 256 2-byte int