|
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> </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> </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 contiene el nº de = formatos de papel que admite la impresora</FONT></P> <P><FONT face=Arial size=2>Nbpaper = CallDLL32("winspool.drv","DeviceCapabilitiesA" , &impre,&PUERTO,2,&TPAPER, 0) </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> 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" , &impre,&PUERTO,16,&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> ListAdd("PAPEL",PAPER[CI])</FONT></P> <P><FONT face=Arial size=2>END</FONT></P> <DIV><FONT face=Arial size=2>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?</FONT></DIV> <DIV><FONT face=Arial size=2></FONT> </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 |
| |
| |
| | | |
|
| | | | |
| | |
|