Hallo
Zitat:
procedure TForm1.WordDocumentBeforeSave(ASender: TObject; const Doc: WordDocument; SaveAsUI: WordBool; var Cancel: WordBool);
begin
SaveAsUI := False; // Verhindert das Anzeigen des Speicherdialogs
Doc.Save; // Speichert das Dokument
end;
Leider klappt das nicht bei mir. Der Event WordDocumentBeforeSave ist erst aktiv, nachdem der besagt Speicherdialog in Word angezeigt wurde.
Dank eurer tollen Hilfe habe ich mittlerweile eine doch schon brauchbar Lösung beisammen. Und zwar verwende ich hierzu den OnDocumentBeforeClose-Event, da dieser vor dem Einblenden des Speicher-Dialogs aktiv wird.
Untenstehend der aktuelle Code.
Wenn der Benutzer Word schliesst, wird zuerst Word ausgeblendet und die aufrufende Applikation zeigt den eigenen Speicher-Dialog an.
Schön wäre es aber, wenn man den eigenen Speicher-Dialog noch im nicht ausgeblendeten Word anzeigen lassen könnte. Würde dies allenfalls mit dem Word-
Handle (übergeben an die Messagebox) funktionieren und falls ja, wie kann man das Word-
Handle ermitteln?
Code:
procedure TForm31.WordBeforeClose(ASender: TObject; const Doc: WordDocument; var Cancel: WordBool);
var resSaveMsg: integer;
begin
resSaveMsg := mrNone;
wordApp.Application.Visible := false;
if not Doc.Saved then // Worddokoment wurde verändert
resSaveMsg := MessageBox(
Handle, PWideChar('Möchten Sie die Änderungen im Dokument speichern?'),
PWideChar('Microsoft Word'), MB_ICONQUESTION or MB_YESNOCANCEL or MB_DEFBUTTON3);
case resSaveMsg of
mrYes,
mrNo: begin
if resSaveMsg = mrYes then begin
wordApp.Documents.Save(true, true);
end;
Cancel := true;
wordApp.OnDocumentBeforeClose := nil;
wordApp.Disconnect;
wordApp.Quit(resSaveMsg = mrYes);
end;
mrCancel: begin
Cancel := true;
wordApp.Application.Visible := true;
wordApp.Application.Activate;
end;
else
Cancel := true;
wordApp.OnDocumentBeforeClose := nil;
wordApp.Disconnect;
wordApp.Quit(false);
end;
end;