Abruf von Property-Objekten geht nicht bei 1.9.335 SL1

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Abruf von Property-Objekten geht nicht bei 1.9.335 SL1

Beitrag von Peter Schweizer »

Hallo liebe Spezialisten,
ich versuche gerade über OpenOffice ein Dokument auszudrucken (was auch grundsätzlich funktioniert).
Nur habe ich Probleme die Eigenschaften des Druckers anzuzeigen.

Das Kuriose ist, das bei xBase 1.9.331 es wie erwartet funktioniert, sobald ich aber den gleichen Code mit 1.9.335 SL1
kompliere, meldet die MsgBox( ...) nur NIL Werte.

Hat jemand eine Idee was da schiefgeht ?

Gruß Peter

Code: Alles auswählen

// den Servicemanager erzeugen
oServiceManager := CreateObject("com.sun.star.ServiceManager")

// ein Parameterarray erzeugen
oHidden  := MakeProperty( "Hidden", TRUE )
LoadArgs := VTType():New( {oHidden}, VT_ARRAY+VT_VARIANT )

// den OOo-Desktop unsichtbar erzeugen
oDesktop := oServiceManager:createInstanceWithArguments("com.sun.star.frame.Desktop", LoadArgs )
*--------------------------
// Das Dokument unsichtbar laden
oDocument := oDesktop:LoadComponentFromURL( convertToURL(cPath), '_blank', 0, LoadArgs  )

/*  Die Druckereigenschaften abfragen
oDocument:getPrinter() soll ein Array von Property-Objekten liefern. Tats„chlich
liefert es aber ein Array von Interfacepointern. Damit man damit etwas anfangen kann,
mssen aus den Interfacepointern erst AutomationObjects gemacht werden.
Das erledigt die Hilfsfunktion MakeProperty() gleich mit.*/

aPrinterProperties := oDocument:getPrinter()
aeval( aPrinterProperties, {|x,i| x := MakeProperty( x )} , , , TRUE )

// Die Druckereigenschaften anzeigen
 cText := ""
 aeval( aPrinterProperties, {|o| cText += var2char(o:Name) + " " + TAB + var2char(o:value) + CR } )
 MsgBox( cText, "Eigenschaften des Defaultdruckers" )

NullArgs := VTType():New( {}, VT_ARRAY+VT_VARIANT )	// ein leeres Parameterarray erzeugen
oDocument:print( NullArgs )		// Das Dokument auf dem Defaultdrucker ausgeben
oDocument:close( TRUE )  //Das Dokument schlieáen
...
*******************************************************************************
FUNCTION MakeProperty( ncName, xValue )   // ein Property-Objekt erzeugen
	LOCAL oStruct
	IF ISNUMBER( ncName )
		// vom Interface-Pointer zum AutomationObject
		oStruct := AutomationObject():Create( ncName )
	ELSE
		oStruct := oServiceManager:Bridge_GetStruct("com.sun.star.beans.PropertyValue")
		IF ISCHARACTER( ncName )
			oStruct:Name   := ncName
		ENDIF
		IF xValue <> NIL
			oStruct:Value  := xValue
		ENDIF
	ENDIF
RETURN oStruct
Gruss Peter
Antworten