Kann Frame Name nicht setzen (OO 2.2.0)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Kann Frame Name nicht setzen (OO 2.2.0)

von Stephan » Fr, 11.05.2007 17:31

Warum extra eine Text-Datei erzeugen, wenn man OO-Writer hat ?
Weil ich dachte das würde genügen, weil du ja keine Formatierungen brauchst.
Rein sachlich vielleicht deshalb weil es erheblich schneller geht das zu tun statt ein Writerdokument zu erzeugen und Du den Inhalt der Textdatei anschließend prinzipiell auch in einem modalen Dialog anzeigen könntest, was benutzerfreundlicher ist da dann der Nutzer sein eigentliches Dokument und die Debug-Ausgabe gleichzeitig (ohne Fensterwechsel) sehen könnte.
Leider hab ich keine Idee, wie ich den Fehler anders abfangen könnte, denn das oDebug Objekt existiert ja noch, wenn das Writer Dokument manuell geschlossen wird.


OK, das hatte ich dann nicht verstanden.



Gruß
Stephan

Hupps, STEPHAN natürlich...

von Kalinka » Fr, 11.05.2007 11:22

Entschuldigung...

gelöst :-)

von Kalinka » Fr, 11.05.2007 11:21

Hallo Stefan,

danke für die Anregungen.
Ein einfaches

Code: Alles auswählen

oDebug.getCurrentController.Frame.Name = "Debugmeldungen"
nach dem Erzeugen des Writer-Debugdokumentes hat in meinem Fall das Problem gelöst.
Super simpel, aber morgens kann man einfach besser denken...

1. den Frame-Titel wollte ich nicht nehmen, da der nicht von der praktischen findFrame() Funktion unterstützt wird und ich dann extra alle OO Dokumente über eine Schleife einzeln abfragen müßte.

2. Warum extra eine Text-Datei erzeugen, wenn man OO-Writer hat ?

3. Leider hab ich keine Idee, wie ich den Fehler anders abfangen könnte, denn das oDebug Objekt existiert ja noch, wenn das Writer Dokument manuell geschlossen wird. Mir fiel eigentlich nur ein, zu gucken, ob der Frame noch existiert. Evtl. umständlich, weiß ich aber im Moment nicht besser.

Falls ich das Writer Dokument zur Laufzeit verstecke, dann sieht der Anwender ja die Ausgaben meines Programmes nicht. Da es aus mehreren Aktionsblöcken besteht, die voneinander unabhängig sind, die Meldungen aber alle in einer Datei gesammelt werden sollen (ist was für die Buchhaltung und die brauchen immer alle Fehler ausgedruckt), muß ich notgedrungen jedesmal gucken, ob mein Dokument noch existiert...

Danke für die Hilfe,

Rado

von Stephan » Do, 10.05.2007 20:33

Ist das nun ein neues 'Feature' der 2.2.0 oder mache ich da etwas falsch ?
Ich denke weder noch, es liegt wohl ein Fehler in OOo vor, jedenfalls funktioniert das Prinzip in 1.1.4 jedoch in 2.0.4 (wie bei Dir in 2.2.0) nicht.

Ich würde 3 Alternativen vorschlagen:
1. Gib einen Titel für den Frame an und verwende diesen zur Identifizierung

oder:
2. schreibe die Informationen gleich in ein gewöhnliches *.txt z.B. mittels WRITE

oder:
3. fange den Fehler ab der auftritt wenn Du versuchst auf das möglicherweise nicht mehr existente Dokument zuzugreifen.
Im Kern ist das hier vielleicht ohnehin besser, da ja selbst wenn es funktionieren würde anhand des Frame-Names die tatsächliche Existenz des Dokuments zu prüfen trotzdem andere Fehler auftreten können die zum Absturz führen.


Ich verstehe aber auch nicht (vielleicht gibt es einen Grund und Du hast ihn nur nicht genannt) wo Du das Risiko:
Falls das Writer-Debugdokument während der Laufzeit vom User geschlossen wird, führt ein Zugriff auf mein Object oDebug zum Programmabsturz.
siehst, weil:
Du kannst das Dokument versteckt öffnen, dann kann es der User nicht ohne Code schließen und falls er das vorhat kann er sowieso Deinen Code manipulieren wie er will.




Gruß
Stephan

Kann Frame Name nicht setzen (OO 2.2.0)

von Kalinka » Do, 10.05.2007 18:01

Hallo,

mein Programm gibt Infos zur Laufzeit in einem Writer-Debugdokument aus.
Ich erzeuge das Writerdokument zur Laufzeit und halte es in einer Objektvariablen (oDebug). Falls das Writer-Debugdokument während der Laufzeit vom User geschlossen wird, führt ein Zugriff auf mein Object oDebug zum Programmabsturz. Also will ich vor dem Zugriff prüfen, ob es noch real existiert. Ein isObject(oDebug) bringt nichts, da OO das Object nicht automatisch mit dem Schließen des Dokumentes zerstört (daher ja auch der Absturz). Mein Ansatz daher:

Code: Alles auswählen

Private oDebug as Object
...
'-----------------------------------------------------------------
' erzeugt ein Writer-Dokument für die Debug-Meldungen
'-----------------------------------------------------------------
Sub CreateDebugDoc()
Dim sUrl as String, lSearch as Long, sFrame as String
Dim NoArgs()
	lSearch = com.sun.star.frame.FrameSearchFlag.ALL + com.sun.star.frame.FrameSearchFlag.CREATE
	sFrame = "Debugmeldungen"
	sUrl = "private:factory/swriter"
	oDebug = StarDesktop.LoadComponentFromURL(sUrl,sFrame,lSearch,NoArgs)
	'oDebug.getCurrentController.Frame.ContainerWindow.Visible = False
End Sub

'-----------------------------------------------------------------
' schreibt einen String in das Debug-Dokument
'-----------------------------------------------------------------
Sub WriteDebugString(LocString as string)
Dim oLocCursor as Object, bFound as Boolean
Dim oDocs as object, oDocNeu as object
Dim oLocText as Object, lSearch as Long
	lSearch = com.sun.star.frame.FrameSearchFlag.ALL
	If isNull(StarDesktop.findFrame("Debugmeldungen",lSearch)) Then
		createDebugDoc()
	End If
	oLocText = oDebug.text
	oLocCursor = oLocText.createTextCursor()
	oLocCursor.gotoEnd(False)
	oLocText.insertString(oLocCursor,LocString & chr(13) & chr(13),False)
	MsgBox("Framename oDebug: " & oDebug.currentController.Frame.name)
End Sub
Obwohl in der OO-SDK http://api.openoffice.org/docs/common/r ... oader.html geschrieben steht, daß man Frames so benennen können soll, klappt es nicht.
Der neue Frame bekommt nie den Namen "Debugmeldungen", sondern der Name ist immer leer. Ergo wird für jede Ausgabe ein neues Writerdokument erzeugt.
Ist das nun ein neues 'Feature' der 2.2.0 oder mache ich da etwas falsch ?

Danke für Eure Hilfe, Rado

Nach oben