Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Unterbricht FastReport Synchronize? (https://www.delphipraxis.net/200430-unterbricht-fastreport-synchronize.html)

Markus Effenberger 18. Apr 2019 19:43

Unterbricht FastReport Synchronize?
 
Hallo Experten

In einem Projekt wird in einem OnGet in einem HTTPServer ein Ausdruck eines FAstReport angestoßen.
Weil auf das GUI zugegriffen wird, soll immer nur EIN ONGet gleichzeitig ausgeführt werden. Es darf NIEMALS zwei GLEICHZEITIG!
In einem anderen Thread gab mir schon jemand den Tipp, alles in einem Synchronize zu kapseln. (siehe Codeschnippel)


Code:
procedure TfrmMain.HTTPServerCommandGet(AContext: TIdContext;
                                        ARequestInfo: TIdHTTPRequestInfo;
                                        AResponseInfo: TIdHTTPResponseInfo);
begin

  try

    TThread.Synchronize(nil,
       procedure
       begin

         if druckerindex > -1 then
           begin
             frxReportServiceDruck.PrintOptions.Printer := Printer.Printers[druckerindex].Device;

             if frxReportServiceDruck.PrepareReport
               then         frxReportBestellDruck.Print;
           end;

         ANTWORTEN_ERZEUGEN(AContext, ARequestInfo, AResponseInfo);
         // -> AResponseInfo.ContentText

       end
    );

  except
    on e:exception do
      begin
        AResponseInfo.ContentText := 'Systemfehlermeldung vom Server: ' + e.Message;
      end;
  end;

end;
Weiß jemand, ob das Drucken mit dem FastReport wieder irgendwie in einen Thread abkapselt?
Ich habe irgendwie den Eindruck, als wenn es möglich ist, dass ein OnGet gerade ANTWORTEN_ERZEUGEN abarbeitet, während ein anderes OnGet gerade den Report druckt.

Ist das möglich?

Markus

Uwe Raabe 18. Apr 2019 20:36

AW: Unterbricht FastReport Synchronize?
 
Zitat:

Zitat von Markus Effenberger (Beitrag 1430595)
Weiß jemand, ob das Drucken mit dem FastReport wieder irgendwie in einen Thread abkapselt?
Ich habe irgendwie den Eindruck, als wenn es möglich ist, dass ein OnGet gerade ANTWORTEN_ERZEUGEN abarbeitet, während ein anderes OnGet gerade den Report druckt.

Ist das möglich?

FastReport ruft intern gelegentlich Application.ProcessMessages auf. Also: Ja, das ist möglich!

Du kannst das vielleicht etwas entschärfen, wenn du bei den EngineOptions im Report das EnableThreadSafe aktivierst:
Delphi-Quellcode:
  frxReportServiceDruck.EngineOptions.EnableThreadSafe := True;
  if frxReportServiceDruck.PrepareReport
  then
    frxReportBestellDruck.Print;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz