Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
1.302 Beiträge
 
Delphi 7 Professional
 
#18

AW: Excel mit SendMessage ohne Speicher-Nachfrage beenden

  Alt 2. Aug 2019, 13:28
Hallo Zusammen,

vielen Dank für die Hilfe. Ich konnte es damit lösen.
Die Zeile ExcelApp.DisplayAlerts:=False; brachte den gewünschten Erfolg.

So sieht die ganze Procedure aus:
Delphi-Quellcode:
procedure TExcelExport.ShowTemp(Pfad: string; Drucken: boolean);
var h: hwnd;
begin
   OpenTemp;
   FWorkBook :=FExcelApp.Workbooks.open(pfad);
   if Drucken then begin
      FExcelApp.Worksheets.PrintOut;
      FExcelApp.DisplayAlerts:=False;
      h := FindWindowByTitle(copy(pfad, Length(pfad)-25,21));
      if h <> 0 then
         SendMessage(h, WM_SYSCOMMAND, SC_CLOSE, 0)
      else
         ShowMessage('not found.');
   end
   else begin
      FExcelApp.Visible := True;
   end;
end;
Vielen Dank
Patrick
Das mag ja sein, dass das jetzt für Dich funktioniert, wenn aber der Anwender mal Excel schließt und vergessen hat, da irgendwas zu speichern, bekommt er wohl auch keine Meldung mehr. Ist das wirklich erwünscht?

Zumindest solltest Du dann am Ende Deiner Routine FExcelApp.DisplayAlerts wieder auf den Ursprungswert setzen.

Bernhard Geyer Lösungsvorschlag ist allerdings der deutlich intelligentere.

Was ich sehr befremdlich finde: Du hast die Excelinstanz, mit der Du arbeitest im Zugriff. Und um die zu beenden suchst Du sie mittels "irgendwelcher Stringmanipulation", in der Hoffnung, dass die auch immer so funktioniert, um die bekannte und im Zugriff befindliche Excelinstanz zu schließen. Und wenn das nicht klappt bekommt der Anwender ein überaus aussagefähiges "not found." zu Gesicht, auf das er sicherlich absoulut sinnvoll reagieren kann?

Keine Chance, dies bei uns durch den Test und die Qualitätssicherung zu bekommen.

Geändert von Delphi.Narium ( 2. Aug 2019 um 17:42 Uhr)
  Mit Zitat antworten Zitat