Ignacio, Jose...
He modificado la clase TPrinter, el método Run(), para cuando se lanza este diálogo directamente, sin utilizar el Preview.
Lo normal y lógico es que no se puedan seleccionar ni área ni páginas a imprimir, pues no sabemos antes de imprimir cuantas páginas tenemos a imprimir.
METHOD Run( oForm ) CLASS XPrinter
LOCAL lOld, lRet
IF ::oPrnDlg == Nil
::oPrnDlg := TPrintDlg():Create( oForm )
ENDIF
lOld := ::oPrnDlg:lPrintSetup
lRet := .F.
::oPrnDlg:lPrintSetup := .F.
::oPrnDlg:lNoSelection := .T. //Selección no habilitado
::oPrnDlg:lNoPageNums := .T. //Paginas no habilitado
IF ::oPrnDlg:Run()
::FnCopies := ::oPrnDlg:nCopies
::FlCollate := ::oPrnDlg:lCollate
::PrinterIndex()
IF ! Empty( ::oPrnDlg:hDC )
::StartDoc( , oForm, ::oPrnDlg:hDC )
ENDIF
lRet := .T.
ENDIF
::oPrnDlg:lPrintSetup := lOld
RETURN lRet
No se si es del todo correcto o no, pero funciona.
De ser correcto, ¿no creeis que sería mas correcto añadir estos cambios a la clase en Xailer para futuras versiones???
Un Saludo,
Xevi.
"Xevi" <
xevicomas@gmail.com> escribió en el mensaje news:[email=4b0aedad@svctag-j7w3v3j....]4b0aedad@svctag-j7w3v3j....[/email]
Ignacio,
Puedo entenderlo, si no hay vista preliminar, es absurdo solicitar de que pagina a que página,... ahora bien,
¿puedo desactivar los controladores de página, intercalar, del cuadro diálogo sin lanzar el Preview???
Porque entiendo que TPrinter lanza el diálogo de impresoras automáticamente, pero no veo como puedo limitar el acceso a estos campos que no quiero que se puedan acceder.
Gracias.
Un Saludo,
Xevi.
"Ignacio Ortiz de Zúñiga" <
NoNameToAvoidSpam@xailer.com> escribió en el mensaje news:4b0ae37f$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Xevi,
Eres tu el que tiene controlar los valores que devuelve TPrintDlg e imprimir sólo las páginas necesarias.
Ejemplo de PreviewControl:
METHOD Print( nPage ) CLASS XPreviewControl
LOCAL aRange
LOCAL nFirst, nLast, nFor
LOCAL hDC
LOCAL lDestroyDC := .F.
LOCAL x, y, nWidth, nHeight
DO CASE
CASE nPage == Nil // Todo
nFirst := 1
nLast := Len( ::oPreviewDC:aEmf )
CASE nPage > 0
nFirst := nPage
nLast := nPage
CASE nPage == 0
aRange := ::GetRange()
IF ! Empty( aRange )
nFirst := aRange[ 1 ]
nLast := aRange[ 2 ]
ELSE
RETURN Nil
ENDIF
OTHERWISE
WITH OBJECT TPrintDlg():Create()
:lPrintSetup := .F.
:lSelection := .F.
:lReturnDC := .T.
:nToPage := Len( ::oPreviewDC:aEmf )
IF :Run()
hDC := :hDC
lDestroyDC := .T.
nFirst := :nFromPage
nLast := :nToPage
ELSE
RETURN Nil
ENDIF
END WITH
END CASE
IF nFirst < 1 .OR. nLast > Len( ::oPreviewDC:aEmf ) .OR. nFirst > nLast
MessageBeep()
RETURN NIL
ENDIF
IF Empty( hDC )
IF ::oPreviewDC:nPrinterIndex != Printer:nPrinterIndex
hDC := PrinterCreateDC()
lDestroyDC := .T.
ELSE
hDC := ::oPreviewDC:hPrinterDC
ENDIF
ENDIF
Application:lBusy := .T.
PrinterStartDoc( hDC, ::oParent:cText )
FOR nFor := nFirst TO nLast
PrinterStartPage( hDC )
nWidth := GetDeviceCaps( hdc, PHYSICALWIDTH )
nHeight := GetDeviceCaps( hdc, PHYSICALHEIGHT )
IF nWidth / nHeight <= ::oPreviewDC:aEmf[ nFor ]:nWidth / ::oPreviewDC:aEmf[ nFor ]:nHeight
nHeight := ::oPreviewDC:aEmf[ nFor ]:nHeight * nWidth / ::oPreviewDC:aEmf[ nFor ]:nWidth
x := 0
y := ( GetDeviceCaps( hdc, PHYSICALHEIGHT ) - nHeight ) / 2
ELSE
nWidth := ::oPreviewDC:aEmf[ nFor ]:nWidth * nHeight / ::oPreviewDC:aEmf[ nFor ]:nHeight
x := ( GetDeviceCaps( hdc, PHYSICALWIDTH ) - nWidth ) / 2
y := 0
ENDIF
::oPreviewDC:aEmf[ nFor ]:Paint( hdc, x, y, x + nWidth, y + nHeight )
PrinterEndPage( hDC )
NEXT
PrinterEndDoc( hDC, .F. )
IF lDestroyDC
PrinterDeleteDC( hDC )
ENDIF
Application:lBusy := .F.
RETURN Nil
Saludos,
--
Ignacio Ortiz de Zúñiga
Xailer support / Soporte de Xailer
http://www.xailer.com
http://www.xailer.info
"Xevi" <
xevicomas@gmail.com> escribió en el mensaje news:4b0ae062$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Ignacio,
>
>
> Es el mismo diálogo de Impresoras, si se quiere cambiar cualquier otro
> parámetro como la impresora de salida o las páginas a imprimir... no tiene
> ningún efecto.
>
> El mismo ejemplo sencillo que he puesto para comprovar si se cambian de
> copias sirve para el mismo menester, pues en lugar de cambiar las copias, si
> intentas cambiar de impresora o solicitar SOLO la página 2... verás que no
> funciona como es debido.
> Te adjunto el mismo sample con tres páginas para que puedas probarlo.
>
>
> Un Saludo,
> Xevi.
>
>
> "Ignacio Ortiz de Zúñiga" <
NoNameToAvoidSpam@xailer.com> escribió en el
> mensaje news:4b0ad5db$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>> Xevi,
>>
>> Dime que diálogo y que otro parámetro. Gracias. (a ser posible como
>> reproducirlo desde el ejemplo PrinterInfo)
>>
>> Un saludo,
>>
>> --
>> Ignacio Ortiz de Zúñiga
>> Xailer support / Soporte de Xailer
>>
http://www.xailer.com
>>
http://www.xailer.info
>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>> news:[email=4b0acbce@svctag-j7w3v3j....]4b0acbce@svctag-j7w3v3j....[/email]
>>> Ignacio,
>>>
>>> El número de copias a imprimir... Arreglado!!!
>>> Ahora bien, si modificamos algun otro parámetro del cuadrodiálogo,
>>> como...
>>> otra impresora que no sea la proporcionada,
>>> páginas a imprimir,
>>> las otras opciones no las he probado
>>> ... sigue fallando.
>>>
>>> Por lo visto ya teneis por donde está el cambio en esta versión de
>>> Windows.
>>>
>>> Gracias.
>>>
>>> Un Saludo,
>>> Xevi.
>>>
>>>
>>> "Ignacio Ortiz de Zúñiga" <
NoNameToAvoidSpam@xailer.com> escribió en el
>>> mensaje news:4b0ac0f1$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>>>> Xevi,
>>>>
>>>> Prueba con el fichero adjunto.
>>>>
>>>> Un saludo,
>>>>
>>>> --
>>>> Ignacio Ortiz de Zúñiga
>>>> Xailer support / Soporte de Xailer
>>>>
http://www.xailer.com
>>>>
http://www.xailer.info
>>>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>>>> news:4b0a9bad$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>>>>> José,
>>>>>
>>>>> He preparado un pequeño ejemplo... lo mas sencillo, para ver como se
>>>>> comporta Xailer al imprimir utilizando o no el Preview.
>>>>> El error está al IMPRIMIR SIN UTILIZAR PREVIEW...
>>>>>
>>>>> Debo añadir al error que TODO lo que se modifique en el cuadro de
>>>>> diálogo de
>>>>> impresoras no tiene ningún efecto al pulsar finalmente el botón
>>>>> "Imprimir".
>>>>> Si cambiamos de impresora...
>>>>> Si solicitamos distintas cópias...
>>>>> Si fallan estos dos parámetros, igual van a fallar el intercalado y las
>>>>> hosjas a imprimir.
>>>>>
>>>>> TODOS los parámetros los lanza con los datos que ha abierto el cuadro
>>>>> diálogo.
>>>>>
>>>>>
>>>>> Esto me hace pensar...

>>>>> Igual TODOS los cuadros de diálogo que utilizemos en 7 tienen el
>>>>> comportamiento "distinto" hasta esta nueva versión de Windows,... por
>>>>> lo
>>>>> que
>>>>> intentaré probar los distintos cuadros de diálogo,Abrir, Guardar...
>>>>>
>>>>> Gracias.
>>>>>
>>>>>
>>>>> Un Saludo,
>>>>> Xevi.
>>>>>
>>>>>
>>>>> "José Lalín" <
dezac_quitaesto_@corevia.com> escribió en el mensaje
>>>>> news:4b0a8b84$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
>>>>>
>>>>> Xevi,
>>>>>
>>>>> ¿puedes poner el fuente donde lanzas la impresión?
>>>>>
>>>>> Saludos,
>>>>> José Lalín
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
>
>
--