Autor Beitrag
melem
Hält's aus hier
Beiträge: 2
Erhaltene Danke: 1



BeitragVerfasst: Fr 22.05.20 11:45 
Hallo zusammen,

bei einem Kunden wird von Office 2010 auf 2016 umgestellt. Dabei ergeben sich mehrere Probleme bei der Anbindung von Word, für die ich noch keine Lösung gefunden habe.
Die Anbindung erfolgt über die Komponente TWordApplication, wir arbeiten mit Delphi 10.2.

1. Bisher wird im BeforeDocumentSave-Event die Speicherlogik von Word komplett unterdrückt. Dazu wird u.a. der Parameter SaveAsUI auf false gesetzt, damit der Speichern-unter-Dialog nicht gezeigt wird. Mit der Umstellung wird aber erst der Dialog gezeigt und danach das Event aufgerufen. Kann ich die Anzeige des Dialogs auf einem anderen Weg unterdrücken?
(Methodenkopf des Events: procedure WordAppDocumentBeforeSave(ASender: TObject; const Doc: _Document; var SaveAsUI, Cancel: WordBool);)

2. Will man das ungespeicherte Dokument schließen, kommt die Speicherabfrage. Bei Klick auf 'nicht speichern' wird dennoch das Event (BeforeDocumentSave) aufgerufen.
Wie kann ich unterscheiden, ob der Anwender tatsächlich speichern will oder nicht?

3. Wenn ich bestehende Dokumente öffne (die werden aus der DB gelesen und temporär auf der Platte gespeichert), ist das Dokument anfangs gesperrt. Der Anwender muss es erst über Ansicht - Dokument bearbeiten aktivieren. Kann ich das verhindern?

Danke und viele Grüße,
Melem

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
melem Threadstarter
Hält's aus hier
Beiträge: 2
Erhaltene Danke: 1



BeitragVerfasst: Mi 27.05.20 15:34 
Falls es jemanden interessiert - ich habe Lösungen/Workarounds gefunden:

1. Das DocumentBeforeSave-Event wird wieder wie früher VOR dem Speichern-unter-Dialog aufgerufen, wenn unter Datei - Optionen - Speichern im Bereich 'Dokumente speichern' die Option 'Backstage beim Öffnen und Speichern von Dateien nicht anzeigen' aktiviert ist.

2. Zur Unterscheidung, ob der Anwender beim Schließen auf 'speichern' oder 'nicht speichern' geklickt hat, verwende ich die Eigenschaft IsInAutoSave des Dokuments. Ist zwar nicht ganz sauber, aber in unserer Umgebung scheint es zu funktionieren: Wenn der Anwender auf 'nicht speichern' geht, steht IsInAutoSave auf True, sonst False.
(Der Zugriff muss über das Dokument als OleVariant erfolgen, da die Eigenschaft nicht in _Document enthalten ist. Dem OleVariant weise ich den Parameter Doc aus dem Event zu und lese dort IsInAutoSave aus.)

3. Das dritte Problem hatte ich nur auf dem Entwicklungsrechner und habe es daher erstmal ignoriert.

Für diesen Beitrag haben gedankt: icho2099