Einzelnen Beitrag anzeigen

rdeutsch

Registriert seit: 24. Mär 2006
77 Beiträge
 
Delphi 12 Athens
 
#9

AW: TWordApplication - wie beim Schliessen erkennen ob ein Dokument verändert wurde?

  Alt 11. Sep 2024, 15:04
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;
  Mit Zitat antworten Zitat