XbpPrintDialog()

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

XbpPrintDialog()

Beitrag 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 ??
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag von Tom »

Hallo, Rolf.

Ich verstehe den Zusammenhang nicht - was hat XbpPrintDialog() mit dem Drucken aus Word heraus zu tun? :?
Herzlich,
Tom
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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.
Gruß
Klaus
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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 ???
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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.
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpPrintDialog()

Beitrag 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.
gruss by OHR
Jimmy
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpPrintDialog()

Beitrag 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 ...
gruss by OHR
Jimmy
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: XbpPrintDialog()

Beitrag 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 ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Antworten