Seite 1 von 1

XbpPrintDialog()

Verfasst: Do, 12. Feb 2009 17:10
von Rolf Ramacher
Hi

ich übergeben eine RTF-Datei zum Druck an Word und gebe den Seitenbereich vor:

Code: Alles auswählen

oDlg:pageRange 		  := {1,99 }
damit der Anwender die Seiten von bis eingeben kann. Eingeben kann ich -

aber trotzdem werden immer alle Seiten gedruckt. Egal auf welchem Drucker - warum ??

Re: XbpPrintDialog()

Verfasst: Do, 12. Feb 2009 17:19
von Tom
Hallo, Rolf.

Ich verstehe den Zusammenhang nicht - was hat XbpPrintDialog() mit dem Drucken aus Word heraus zu tun? :?

Re: XbpPrintDialog()

Verfasst: Do, 12. Feb 2009 17:53
von Rolf Ramacher
Hi Tom

wenn ich XbpPrintdialog() starte kann ich ja den Drucker auswählen. Hierbei kann ich auch die Seitenanzahl von bis eingeben.
Nur das nützt nichts es werden immer allle Seiten gedruckt

Re: XbpPrintDialog()

Verfasst: Do, 12. Feb 2009 18:23
von Tom
Hallo, Rolf.

Schon klar, aber Word dürfte sich herzlich wenig dafür interessieren, was Du in Deiner Xbase++-Applikation einstellst. Das hat schlicht und ergreifend keinen Einfluss aufeinander. Selbst wenn Du Word über ActiveX ansteuerst und druckst (oDocument:PrintOut()) schert sich Word wenig um Deine Xbase-Printerobjekte.

Re: XbpPrintDialog()

Verfasst: Fr, 13. Feb 2009 8:11
von Koverhage
Rolf und Tom,

Word kümmert das schon wenn es bei der Printout Methode angegeben wird (5. und 6. Parameter).

Rolf, warum schaust Du nicht im ActiveX Forum, da habe ich schon soviel zu printout geschrieben und auch den Code
gepostet.

Re: XbpPrintDialog()

Verfasst: Fr, 13. Feb 2009 9:19
von Rolf Ramacher
HI Leute,

also ich habe grade mal gedruckt ohne word gedruckt mit GraStringAt(). Wenn ich mit pageRange{1-99} die Möglichkeit gebe
die Seitenzahl beim Druck zu verändern, kann ich das ändern wie ich will. Es werden IMMER alle Seiten ausgedruckt.

Das hat mit AktiveX nichts zu tun. woran liegt das ???

Re: XbpPrintDialog()

Verfasst: Fr, 13. Feb 2009 23:33
von brandelh
Hi,

im Printdialog stellt der User ein, was er "möchte", aber die Anwendung muss das dann auch berücksichtigen.
Ich vermute, dass XbpPrintDialog() das nicht direkt an XbpPrinter übergibt und dieser sich schon gar nicht automatisch darum kümmert. XbpPrintDialog() selbst druckt doch nicht oder ? Er ruft doch nur deine Druckroutine mit einem XbpPrinter Objekt auf.
Als ich damals meine Druckerklasse geschrieben habe, gab es den XbpPrintDialog() noch nicht, daher bin ich nicht 100% sicher, wie die beiden tatsächlich zusammenarbeiten.

Ich habe bei meiner Druckerklasse alle GraFunktionen() in Methoden gekapselt und führe intern die zu druckenden Seiten.
Alle nicht zu druckenden Seiten ignorieren intern die Druckerbefehle, wobei das zu druckende Programm das gar nicht mitbekommt, es muss alles drucken (sozusagen virtuell ins Nirwana) sonst könnte bei Listen der Seitenumbruch nicht richtig ermittelt werden.

Re: XbpPrintDialog()

Verfasst: Mi, 25. Feb 2009 18:05
von Rolf Ramacher
Hi,

leider bin ich hier noch nicht weitergekommen.

Hier mein Code-Auszug

Code: Alles auswählen

 oDlg := XbpPrintDialog():new() 
   // Druckausgabe nicht standardmäßig in Datei umleiten 
   oDlg:enablePrintToFile := .f. 
   oDlg:printToFile       := .f. 
	oDlg:pageRange 		  := {1,99 }
   oDlg:create() 

   // Konfiguriertes Drucker Objekt erzeugen 
   oPrinter := oDlg:display() 
*   oDlg:destroy() 

   IF oPrinter <> NIL 
		cPrinter:=oPrinter:DevName
msgbox(var2lchar(oDlg:pagerange))
		Drucken(cVerz+"\filbestandliste.rtf",cPrinter)
	EndIf
bei der msgbox erscheint immer noch meine Vorgabe. Wie kann ich die Eingabe des Benutzers abfragen und dann diese--
Info an den Drucker übergeben. Unter Rubrik "aktive-X" habe ich nichts gefunden.

Re: XbpPrintDialog()

Verfasst: Mi, 25. Feb 2009 22:32
von AUGE_OHR
hi,
Rolf Ramacher hat geschrieben:

Code: Alles auswählen

 oDlg := XbpPrintDialog():new() 
   // Druckausgabe nicht standardmäßig in Datei umleiten 
   oDlg:enablePrintToFile := .f. 
   oDlg:printToFile       := .f. 
	oDlg:pageRange 		  := {1,99 }
   oDlg:create() 

   // Konfiguriertes Drucker Objekt erzeugen 
   oPrinter := oDlg:display() 
*   oDlg:destroy() 

   IF oPrinter <> NIL 
		cPrinter:=oPrinter:DevName
msgbox(var2lchar(oDlg:pagerange))
		Drucken(cVerz+"\filbestandliste.rtf",cPrinter)
	EndIf
bei der msgbox erscheint immer noch meine Vorgabe. Wie kann ich die Eingabe des Benutzers abfragen und dann diese--
Info an den Drucker übergeben. Unter Rubrik "aktive-X" habe ich nichts gefunden.
IMHO ist :pageRange die "vorbelegung" welche dann im :display() angezeigt wird. Dies bedeutet
aber nicht das er dann die Einstellung nimmt sondern "du" musst es :pageRangeSelected zuweisen
so wie auch bei :numCopies.

Re: XbpPrintDialog()

Verfasst: Fr, 27. Feb 2009 17:04
von Rolf Ramacher
Hi

wie muß ich das denn genau gestalten.
Hier der aufruf des Druckprogramms:

Code: Alles auswählen

 oDlg := XbpPrintDialog():new() 
   // Druckausgabe nicht standardmäßig in Datei umleiten 
   oDlg:enablePrintToFile := .f. 
   oDlg:printToFile       := .f. 
	oDlg:pageRange 		  := {1,99 }
   oDlg:create() 

   // Konfiguriertes Drucker Objekt erzeugen 
   oPrinter := oDlg:display() 
*   oDlg:destroy() 

   IF oPrinter <> NIL 
		cPrinter:=oPrinter:DevName
	
		oDlg:PageRangeSelected
		Drucken(cVerz+"\filbestandliste.rtf",cPrinter,oDlg)
	EndIf
Hier der Druck über Word mit Aktivex

Code: Alles auswählen

include "Gra.ch"
#include "Xbp.ch"
#include "Appevent.ch"
#include "Font.ch"
#include "Inkey.ch"
#include "xbpdev.ch"

#pragma Library( "XppUI2.lib" ) 
#pragma library( "ascom10.lib" ) 

Function Drucken( cDoc, cDrucker,oDlg) 
Local cActivePrinter 
Local oWord 
Local oDoc 

    oWord := CreateObject("Word.Application") 

   IF Empty( oWord ) 
     MsgBox( "Microsoft Word ist nicht installiert" ) 
     RETURN Nil
   ENDIF 

   oWord:visible   := .f.                               // Word unsichtbar! 
   cActivePrinter  := oWord:Activeprinter     // aktuellen Drucker feststellen 
   oWord:Activeprinter:= cDrucker               // Neuen Drucker setzen 
   oWord:documents:Open(cDoc)                  
   oDoc       := oWord:ActiveDocument 

	If AT("filbestandliste.rtf",cDoc) > 0
		oDlg:PageRangeSelected

		oDlg:PrintRange:=(XBPPDLG_PRINT_PAGERANGE)
	EndIf

   oDoc:PrintOut(.f.)                                  // .T.= Druck im Hintergrund 
   oWord:Activeprinter:= cActivePrinter       // alten Drucker setzen 
   oDoc:close() 
   oWord:Quit() 
   oWord:destroy() 
   oWord := NIL 
Return ( NIL )
Aber es werden immer alle Seiten gedruckt. Wo muß ich denn ansetzen ??
-
In diesem Zusammenhang hat ein Kunde einen Fehler und zwar bei der Zeile
oWord:visible := .f.

Hier die xpperror.log

Code: Alles auswählen

-----------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\orga\FilBestand.exe" Datum: 27.02.2009 16:01:18

Xbase++ Version     : Xbase++ (R) Version 1.90.331
Betriebssystem      : Windows 95 04.00 Build 00950
------------------------------------------------------------------------------
oError:args         :
          -> VALTYPE: C VALUE: visible
          -> VALTYPE: L VALUE: .F.
oError:canDefault   : J
oError:canRetry     : N
oError:canSubstitute: J
oError:cargo        : NIL
oError:description  : Der RPC-Server ist nicht verfügbar.

oError:filename     : NIL
oError:genCode      : NIL
oError:operation    : visible
oError:osCode       :          -2147023174
oError:severity     :          2
oError:subCode      :       6500
oError:subSystem    : Automation
oError:thread       :          1
oError:tries        : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from DRUCKEN(23)
Called from LISTEDRUCKEN(34)
Called from (B)MAIN(48)
Called from MAIN(62)
Bei mir klappt dies ohne Probleme.

Re: XbpPrintDialog()

Verfasst: Fr, 27. Feb 2009 19:11
von AUGE_OHR
hi,
Rolf Ramacher hat geschrieben: Hier die xpperror.log

Code: Alles auswählen

-----------------------------------------------------------------------------
FEHLERPROTOKOLL von "C:\orga\FilBestand.exe" Datum: 27.02.2009 16:01:18
Xbase++ Version     : Xbase++ (R) Version 1.90.331
Betriebssystem      : Windows 95 04.00 Build 00950
Bei mir klappt dies ohne Probleme.
Windows 95 04.00 Build 00950
Das Betriebssystem wird nicht von v1.9x unterstützt. Dein "RPC-Server" Problem hat was mit der
*.VXD zu tun ...

Re: XbpPrintDialog()

Verfasst: Sa, 28. Feb 2009 12:11
von Rolf Ramacher
Hi Jimmy,

dann verstehe ich aber etwas nicht. Bei dem xpperrror.log steht Win95 - Bei der Systeminfo, die ich vom Kunden habe,
gibt die Function Os() aber windows XP zurück.

Oder hat der evtl. drüber installiert ?