Hasta ahora venía usando la función Printersetup() para seleccionar la impresora a la que mandar los listados.
Desde que he actualizado cuando se selecciona la impresora no hace caso a la selección y se elija la que se elija siempre manda la impresión a la que está marcada como predeterminada por el windows.
¿Hay alguna otra manera nueva de hacerlo?
Printersetup()
Re: Printersetup()
João Santos - São Paulo - Brasil
Re: Printersetup()
No me vale esa solución porque lo que hace es cambiar la impresora predeterminada en windows.
Y porque además, el primer documento que se manda a imprimir después de cambiarla, aun sigue saliendo por la impresora primera que estaba como predeterminada.
Y porque además, el primer documento que se manda a imprimir después de cambiarla, aun sigue saliendo por la impresora primera que estaba como predeterminada.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Printersetup()
Paz,
Puedes poner un pequeño ejemplo completo que muestre el problema ? gracias
Puedes poner un pequeño ejemplo completo que muestre el problema ? gracias
Re: Printersetup()
En el siguiente ejemplo se imprimen cuatro documentos.
Al seleccionar la impresora (distinta de la predeterminada de windows) antes de empezar con el bucle de impresión de los cuatro documentos se obtiene como resultado que el primero se imprime en la impresora seleccionada y el resto en la predeterminada de windows:
Al seleccionar la impresora (distinta de la predeterminada de windows) antes de empezar con el bucle de impresión de los cuatro documentos se obtiene como resultado que el primero se imprime en la impresora seleccionada y el resto en la predeterminada de windows:
Code: Select all
#include 'inkey.ch'
#include 'set.ch'
#include 'report.ch'
#include 'fivewin.ch'
#include 'rddsys.ch'
#include "common.ch"
#include "DLL.ch"
#include 'ord.ch' //Para CDX
#include 'Image.ch'
#include "fileio.ch"
external dbfcdx, ordkeyno, ordkeycount, ordkeygoto //Para CDX
REQUEST HB_Lang_ES
REQUEST HB_CODEPAGE_ESWIN //Comentar en xHarbour
static oWnd
function main()
HB_Langselect("ES")
HB_SetCodePage("ESWIN")
setHandleCount(50)
set 3DLOOK ON
DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-14 //BOLD //SIZE 8,16
DEFINE FONT oFontDoble NAME "MS Sans Serif" SIZE 0,-16
public nSizeCond:= 8
public nSizeNorm:=10
rddsetdefault('DBFCDX')
set AUTOSHARE TO 1 //CDX Modo Multiusuario.
DEFINE BRUSH oBru COLOR rgb(0,0,135) //Fondo de color
DEFINE WINDOW oWnd TITLE 'GESTION DE ESTACIONES' BRUSH oBru MENU MenuPpal()
set MESSAGE OF oWnd TO 'Prueba'+CurDir() CLOCK DATE KEYBOARD
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( oWnd:setfont(oFont) )
return NIL
static function MenuPpal()
local oMenu
MENU oMenu
MENUITEM '&PruebaPRN' ACTION imprimelotedocs()
MENUITEM '&SALIR' ACTION oWnd:end()
ENDMENU
return oMenu
function imprimelotedocs()
local nDocs:=4, i:=0
if PrinterSetup() <> 0
for i=1 TO 4
FImprime_Test(i, .F.)
next i
endif
return nil
/** Funcion para imprimir FACTURAS de CONTADO a clientes.
** Devuelve el nombre de la factura impresa por si se usa para PDF.
**/
function FImprime_Test(nNumeroDoc, lPrever)
local nl:=0 // numero de linea que se está imprimiendo.
local texto:=Space(62) // texto de la línea a imprimir.
local oPrn, oFont1, oFont2, oFontCond
local nsl, nColStep
local fontsize:=-10
local mrgiz:=2, mrgsu:=2 // En centímetros.
local oPen1, oPen2
local salir:=.f.
nsl := 4 * (-1)*fontsize / 100 // Alto en cm para el salto de linea
if lPrever = .f. .or. lPrever=NIL
PRINT oPrn NAME "PruebaPRN"+alltrim(str(nNumeroDoc))
else
PRINT oPrn NAME "PruebaPRN"+alltrim(str(nNumeroDoc)) PREVIEW
endif
DEFINE FONT oFont1 NAME "COURIER NEW" SIZE 0, fontsize OF oPrn
DEFINE FONT oFont2 NAME "COURIER NEW" SIZE 0, fontsize BOLD OF oPrn
DEFINE FONT oFontCond NAME "COURIER NEW" SIZE 0, 8 OF oPrn
DEFINE PEN oPen1 width 1
DEFINE PEN oPen2 width 2
if empty( oPrn:hDC )
msgstop( "No hay impresora preparada" )
salir=.t.
endif
msgwait("IMPRIMIENDO Doc.: PruebaPRN"+alltrim(str(nNumeroDoc)),,1)
PAGE
nl=mrgsu + 3*nsl
// Datos del emisor
oPrn:CmSay(nl,mrgiz, "Campo 1",oFont2)
oPrn:CmSay(nl+1*nsl,mrgiz,"Campo 2",oFont1)
oPrn:CmSay(nl+2*nsl,mrgiz,"Campo 3",oFont1)
nl=nl+7*nsl
oPrn:line(nl,mrgiz,nl,19,oPen2)
nl=nl+1*nsl
texto='PRUEBA DE TEXTO'
oPrn:CmSay(nl,mrgiz,texto,oFont1)
oPrn:CmSay(nl,15,'FECHA: '+dtoc(date()),oFont1)
nl=nl+1*nsl
ENDPAGE //EJECT
ENDPRINT // Apaga la impresora
//oFont1:end()
//oFont2:end()
//oFontCond:end()
oPen1:end()
oPen2:end()
return "PruebaPRN"+alltrim(str(nNumeroDoc))
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Printersetup()
Paz,
> Al seleccionar la impresora (distinta de la predeterminada de windows) antes de empezar con el bucle de impresión
Donde seleccionas la impresora en tu código ?
> Al seleccionar la impresora (distinta de la predeterminada de windows) antes de empezar con el bucle de impresión
Donde seleccionas la impresora en tu código ?
Re: Printersetup()
Lo hago con la función PrinterSetup().
Aparece en una sola de las líneas del código que he puesto.
Aparece en una sola de las líneas del código que he puesto.
Re: Printersetup()
En concreto dentro de la función llamada imprime llamada imprimelotedocs
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Printersetup()
Paz,
Prueba asi:
y luego al crear el objeto PRINT haz asi:
Prueba asi:
Code: Select all
function imprimelotedocs()
local nDocs:=4, i:=0, cPrnName
if PrinterSetup() <> 0
cPrnName = PrnGetName()
for i=1 TO 4
FImprime_Test(i, .F., cPrnName)
next i
endif
return nil
Code: Select all
if lPrever = .f. .or. lPrever=NIL
PRINT oPrn NAME "PruebaPRN"+alltrim(str(nNumeroDoc)) TO cPrnName
else
PRINT oPrn NAME "PruebaPRN"+alltrim(str(nNumeroDoc)) PREVIEW TO cPrnName
endif