Fehlermeldung bei setzen der Orientation

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
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:

Fehlermeldung bei setzen der Orientation

Beitrag von Koverhage »

Hallo,
habe das Problem (bisher nur bei einem Kunden, hat Office bzw. Word 2003), sobald versucht wird die Orientation zu setzen, das Programm mit einer Xbase Fehlermeldung beendet wird. Komischerweise klappt das sichern der aktuellen Einstellung.
Gibt es Systemeinstellungen oder ähnliches, die dies verursachen können?

Code: Alles auswählen

// Oeffnen eines Word-Dokuments und Zugriff auf
  // eine Sammlung von Lesezeichen
  oWord:documents:open( cFile )
  oDoc := oWord:ActiveDocument
  oBM  := oDoc:Bookmarks
  oDruckerSettings := oDoc:PageSetup

  // Ersetzen des Lesezeichens durch einen neuen
  // Wert
 
  // Speichern des Ergebnisses
  IF(ValType(cSaveAs)=="C")
    oDoc:saveas(cSaveAs)
  ENDIF


  // Sichern der aktuellen Einstellungen
  nFirstTrayID := oDruckerSettings:FirstPageTray
  nOtherTrayID := oDruckerSettings:OtherPagesTray
  nOldOrientation := oDruckerSettings:Orientation

  // Setzen der gew
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Moin,

über oDoc:PageSetup:Orientation = <wdOrientation> wird eine Druckeigenschaft für das Dokument gesetzt. Nach Deiner Fehlermeldung wird ein ungültiger Wert gesetzt. Ich vermute, dass über über die Property :Orientation ein Wert gesetzt wird, aber nicht aktuelle Wert zurückgegeben wird.

Warum soll überhaupt der Wert gesichert werden? Die Eigenschaften des Druckers werden über PageSetup selbst nicht geändert.


Gruß, Olaf
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:

Beitrag von Rolf Ramacher »

Hi Klaus,

setzt man mit :orientation nicht "PORTRAIT" oder "LANDSCAPE".

Hast du das etwas gesetzt ??
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
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:

Beitrag von Koverhage »

Hallo Rolf,

unter Xbase++ schon

PORTRAIT
bei MS Word = 0
bei MS Excel = 1
bei Xbase++ = 1

LANDSCAPE
bei MS Word = 1
bei MS Excel = 2
bei Xbase++ = 2

wie so oft ist hier Microsoft mit seinen Produkten nicht kompatibel
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:

Beitrag von Koverhage »

Hallo Olaf,

ok das sichern der aktuellen Einstellungen muss nicht sein.
Aber warum kann ich die Eigenschaft Orientation nicht setzen ?
Bis jetzt funktioniert das nur bei diesem Kunden nicht.

Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Klaus,

Kann es sein, dass dieser Drucker (Treiber) das Setzen der Orientation nicht unterstützt ?
Kann der Kunde das in Word direkt machen ?
Welche Wordversion hat er, eventuell gibt es da Unterschiede ?
Gruß
Hubert
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Koverhage hat geschrieben:Hallo Olaf,

ok das sichern der aktuellen Einstellungen muss nicht sein.
Aber warum kann ich die Eigenschaft Orientation nicht setzen ?
Bis jetzt funktioniert das nur bei diesem Kunden nicht.
Poste doch mal Deinen Code. Die Property :Orientation führte bei meinen Anwendungen noch bei keinem Kunden zu einem Laufzeitfehler.

Gruß, Olaf
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:

Beitrag von Rolf Ramacher »

Hi,

also bei mir klappt dies auch ohne Probleme. Ich setze den Orientation nach der If-Abfrage auf Printer.

hier mein Auszug.

Code: Alles auswählen

// Druckausgabe nicht standardmäßig in Datei umleiten 
   oDlg:enablePrintToFile := .f. 
   oDlg:printToFile       := .f. 
   oDlg:create() 

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

   IF oPrinter <> NIL 
		oPrinter:setOrientation(XBPPRN_ORIENT_LANDSCAPE)
      // Neuen Presentation-Space erzeugen 
      oPS   := XbpPresSpace():new() 
      // Bedruckbarer Bereich auf dem Papier 
      aSize := oPrinter:paperSize() 
      aSize := { aSize[5] - aSize[3],aSize[6] - aSize[4]  } 
      oPS:create( oPrinter, aSize, GRA_PU_LOMETRIC ) 
Danach kommt oPrinter:Startdoc() und was gedruckt wird.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
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:

Beitrag von Koverhage »

Olaf,

hier der Code, ich habe das Problem ja bisher nur bei einem Kunden, bei allen anderen funktioniert das.

Code: Alles auswählen

FUNCTION WordFillANSHKA(cFile,cSaveAs,lPrint, lDruOrEdit,nCopies,lVorschau, nSchacht1, nSchacht2, nOrientation, cPrinter)
  LOCAL oWord,oBM,oDoc, oDruckerSettings
  local mess1 := LGTrans(('Cdb')->sprache,'0051001','Microsoft Word ist nicht installiert')
  LOCAL mess1029 := LGTrans(('Cdb')->sprache,'0051029','nicht gefunden!')
  LOCAL mess1030 := LGTrans(('Cdb')->sprache,'0051030','Datei:')
  local lWordFinished := .f.
  local i := 0
  LOCAL nEvent := 0, mp1, mp2
  LOCAL lBackground := .f.
  LOCAL cOldPrinter
  LOCAL nFirstTrayID := 0
  LOCAL nOtherTrayID := 0
  LOCAL nOldOrientation := 0
  LOCAL cPathWord := cWin2Dos( DC_RegQuery(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe", "") )

#if XPPVER > 01890000

    default lDruOrEdit to .f.
    default lPrint to .f.
    default nCopies to 1
    default lVorschau to .f.
    default nSchacht1 to 0
    default nSchacht2 to 0
    default nOrientation to 0  // Portrait = Normal

    if !Fexists(cFile)
       msgbox(mess1030+" "+cFile+" "+mess1029)
       return .f.
    endif

    i := Rat( ".",cFile)
    if i < 1
       cFile := cFile + ".doc"
    endif

    IF(ValType(cSaveAs)=="C")
       i := Rat( ".",cSaveAs)
       if i < 1
          cSaveAs := cSaveAs + ".doc"
       endif
    ENDIF

  // Erzeugen einer ActiveX-Komponente
  oWord := CreateObject("Word.Application")
  IF Empty( oWord )
     oWord := CreateObject("opendocument.WriterDocument.1")
  ENDIF
  IF Empty( oWord )
    MsgBox( mess1 )
    Return .f.
  ENDIF

  if lDruOrEdit
     oWord := oWord:dynamicCast(ActiveXObject())
     oWord:Quit := {||lWordFinished := .T.}
     oWord:Visible := .T.
     lWordFinished := .F.
  else
     #ifndef WAD
     oWord:Visible := .F.
     oWord:DisplayAlerts := .F.
     #endif
  endif

  // Oeffnen eines Word-Dokuments und Zugriff auf
  // eine Sammlung von Lesezeichen
  oWord:documents:open( cFile )
  oDoc := oWord:ActiveDocument
  oBM  := oDoc:Bookmarks
  oDruckerSettings := oDoc:PageSetup

  // Ersetzen des Lesezeichens durch einen neuen
  // Wert
  // Kundendaten

  ReplaceBookmark(oBM , "M_KDNR"      , m_kdnr )    // Kundenummer


  // Speichern des Ergebnisses
  IF(ValType(cSaveAs)=="C")
    oDoc:saveas(cSaveAs)
  ENDIF


  // Sichern der aktuellen Einstellungen
  nFirstTrayID := oDruckerSettings:FirstPageTray
  nOtherTrayID := oDruckerSettings:OtherPagesTray
  nOldOrientation := oDruckerSettings:Orientation

  // Setzen der gew
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:

Beitrag von Koverhage »

Rolf,

irgendwie verwechselt Du hier was ;-)

Es geht nicht um Xbase++ sondern Activex und Druck über Word
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:

Beitrag von Koverhage »

Hallo Hubert,

ein Drucker (Treiber) der das nicht unterstützt ?
Das kann doch jeder Drucker (sogar die "alten" Nadeldrucker)

Ja in Word direkt geht es.

Der Kunde hat so wie viele andere auch Word 2003.

Ob es da Unterschiede gibt, kann ich nicht sagen, aber was für eine Einstellung sollte das sein ?
Word über Activex aufrufen funktioniert ja, glaube nicht das man einzelne
Eigenschaften verbieten kann, aber dafür kenne ich mich zuwenig aus.
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:

Beitrag von Rolf Ramacher »

Hi Klaus,

doch das war mir schon klar. Also dann liegt es am Word oder am Druckertreiber-.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hi Klaus,
ich würde das Setzen von :Orientation nach dem Druck einfach weglassen.

Das Setzten von :Orientationen bezieht sich eh auf das aktuelle Dokument und nicht auf die generelle Drucker-Einstellung.

Um den Fehler als solches abzufangen, würde ich folgenden Code implementieren:

Code: Alles auswählen

#define wdPortrait    0
#define wdLandcape 1

if Valtype( nOldOrientation )  == "N"
  IF (nOldOrientation == wdLandcape) .or. (nOldOrientation == wdPortrait)
      oDruckerSettings:Orientation := nOldOrientation
  endif
endif
....

Gruß, Olaf
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:

Beitrag von Koverhage »

Hi Olaf,

bis dahin kommt das Programm ja nicht.

Die aktuelle Einstellung wird gesichert (ok, könnte entfallen)
aber der Fehler tritt ja hier

oDruckerSettings:Orientation := nOrientation

auf.
Wie man in der errorlog sieht, enthält nOrientation den Wert 0


Gruss
Klaus
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Dann könnte die Fehlerursache in Zusammenhang mit dem

Code: Alles auswählen

  oWord := CreateObject("Word.Application")
  IF Empty( oWord )
     oWord := CreateObject("opendocument.WriterDocument.1")
  ENDIF 
liegen. Falls also kein Ms-Word Automationsobject erzeugt wurde, wird versucht auf eine eine andere ActiveX-Komponente zuzugreifen. Und der könnte :Orientation unbekannt sein.

Gruß, Olaf
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:

Beitrag von Koverhage »

Olaf,

ja das wäre die einzige Erklärung dafür. Werde das mal prüfen.
Antworten