Seite 1 von 1

[gelöst] Writer vergisst Dokumentstatus

Verfasst: Do, 09.11.2006 11:54
von Schwedenbitter
Ich habe ein Problem mit dem Writer, kann aber nicht ausschließen, dass es auch auf den anderen OOo-Modulen auftauchen kann.

Zur einfachen Sortierung habe ich den Speichern-Dialog durch einen eigenen ersetzt. Um nicht jedesmal ein neues Dokument zu erzeugen, frage ich vor dem Aufruf meines Dialogs ab, ob das Dokument schon (unter einem Namen = Eigenschaft hasLocation) gespeichert wurde. An sich nichts besonderes, dachte ich. Hier der Quellcode:

Code: Alles auswählen

Sub Main
	oDoc = ThisComponent
	If oDoc.isModified() Then
		If Not oDoc.hasLocation() Then
			Abfrage
		End If
	End If
End Sub
Nur wenn hasLocation false ist, sollte mein Dialog aufgerufen und anderenfalls unter dem bereits bestehenden Namen gespeichert werden. Leider funktioniert das nur bedingt:

Wenn ich nach dem speichern einen Dateinamen (mit Fehlerbehandlung!) vergebe und mittels

Code: Alles auswählen

	On Error Goto Verzeichnisfehler:
	oFile = ConvertToURL(oFile)
	Dim D()
	oDoc  = ThisComponent
	On Error Goto Dateifehler:
	oDoc.storeToURL(oFile,D())
	oDoc.Modified = False
	On Error Goto 0
speichere, scheint alles glatt zu gehen. Eine Fehlermeldung erscheint nicht und die Datei kann ich auf der Platte auch sehen.

Allerdings scheint Writer vergesslich zu sein. Wenn ich nämlich nach einiger Zeit wieder auf Speichern klicke, kommt wieder mein Dialog zur Dateinamen-Abfrage :cry:.

Ich gehe davon aus, dass der Fehler nicht an mir liegt :lol:.
Wenn ich nämlich die Datei nach dem speichern sofort schließe und anschließend wieder öffne, klappt es. Wenn ich dann nämlich auf speichern klicke, wird das erledigt und mein Dialog erscheint nur, wenn ich Speichern unter wähle. Anmerken muss ich hierzu noch, dass nach dem speichern über meinen Dialog der Dateiname nicht - wie sonst gewohnt - in Fensterleiste vom Writer angezeigt wird. Beim Neuöffnen der Datei hingegen schon.

Hat jemand eine Idee?
Ich bin ziemlich am Verzweifeln, weil sich mein vergebener Dateiname aus Datum und Urzeit zusammensetzt und ich dann für ein und dieselbe Datei - je nachdem wie oft ich speichere - gleich mehrere Dateien im Verzeichnis befinden.

Verfasst: Fr, 10.11.2006 00:45
von Stephan
Eine Fehlermeldung erscheint nicht und die Datei kann ich auf der Platte auch sehen.
und sicherlich auch löschen, würde ich mal annehmen. Und wenn das geht heißt das das die Datei nicht in Benutzung ist und das scheint mir hier der Fall zu sein, denn:

Code: Alles auswählen

oDoc.storeToURL(oFile,D()) 
bewirkt das Speichern des Dokuments unter angegebener Adresse, jedoch ändert sich der Fokus nicht, der verweist auf die offene 'Datei'.
Wegen:

Code: Alles auswählen

oDoc.Modified = False
dürfte es nicht zu sehen sein das der Fensterinhalt garnicht die gespeicherte Datei zeigt.
Allerdings scheint Writer vergesslich zu sein.
Ich glaube nicht, die Fensteranzeige hat nur keine Adresse und:

Code: Alles auswählen

msgbox ThisComponent.hasLocation()
dürfte False liefern.
Wenn ich nämlich die Datei nach dem speichern sofort schließe und anschließend wieder öffne, klappt es.
Ich glaube nicht das Du das tust, ich glaube nur Du schließt ein Fenster, denn Du selbst hast OOo gehindert zu erkennen das der angezeigte Inhalt des Fensters noch nicht gespeichert ist, weil Du:

Code: Alles auswählen

oDoc.Modified = False
verwendest. Sicheres Zeichen wäre beispielsweise, wenn Du die Datei nicht schließt und öffnest, sondern das mit Datei-Neu Laden bewerkstelligst, bei einer gespeicherten Datei ginge das, bei Deiner 'Datei' wird das nicht gehen.
Anmerken muss ich hierzu noch, dass nach dem speichern über meinen Dialog der Dateiname nicht - wie sonst gewohnt - in Fensterleiste vom Writer angezeigt wird. Beim Neuöffnen der Datei hingegen schon.
Ja, eben und warum macht Dich das nicht stutzig?

Hat jemand eine Idee?


Wenn obenstehende Vermutungen richtig sind hilft ein:

Code: Alles auswählen

oDoc.storeAsURL(oFile,D())


Was ist der Grund?
.storeAsURL speichert das damit angesprochene Dokument, besser gesagt (bei einem ungespeicherten Dokument) den Inhalt des Fensters auf den Du Dich beziehst, nach dem Speichern weist der Fokus auf das gespeicherte Dokument.
.storeToURL speichert das damit angesprochene Dokument, nach dem Speichern weist jedoch der Fokus auf das ursprüngliche Fenster.

Macht das Sinn?
Ja, tut es. Wenn Du ein Dokument hast was bereits gespeichert ist und was erneut gespeichert werden soll um Änderungen zu übernehmen. Dort kannst Du nämlich steuern welches Dokument Du nach dem Speichern siehst.
Beispiel:
Du hast C:\abc.odt offen und speicherst mit:

Code: Alles auswählen

oDoc.storeAsURL(ConvertToURL("C:\def.odt"),D())
ist das beendet ist das angezeigte Dokument def.odt.
Speichert Du unter gleichen Bedingungen mittels:

Code: Alles auswählen

oDoc.storeToURL(ConvertToURL("C:\def.odt"),D())
ist nach dem Speichern das Dokument abc.odt sichtbar.



Gruß
Stephan

Verfasst: Fr, 10.11.2006 10:10
von Schwedenbitter
DANKE vielmals. Ich hätte nicht gedacht, dass es letztendlich nur an zwei Buchstaben liegt: To und As. Jetzt funktioniert es super.
Und ganz nebenbei hat sich damit auch mein anderes Problem gelöst.

P.S. In anderen Foren kann man für gute Antworten Punkte vergeben. Das sollte man hier auch tun. Dann hätte nämlich Stephan die Maximalanzehl von mir bekommen.