Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MessageDlg modal, aber Hintergrundtätigkeit laufen lassen (https://www.delphipraxis.net/95740-messagedlg-modal-aber-hintergrundtaetigkeit-laufen-lassen.html)

DelphiManiac 12. Jul 2007 11:50


MessageDlg modal, aber Hintergrundtätigkeit laufen lassen
 
Hallo,

ich habe folgendes Problem,

ich muss einen Ja / Nein Dialog erscheinen lassen, dieser soll modal angezeitgt werden,
in der Zeit wo dieser Dialog angezeigt wird, sollen bestimmte Kommunikationstätigkeiten im Hintergrund weiterlaufen,
das ist nicht weltbewegend, aber das Problem an dem modalen MessageDlg ist, dass es ja
alles was im Hintergrund läuft (wie z.B.: einen Timer) anhält...

Einen Thread will ich an der Stelle eigentlich nicht anwenden, der wäre ein wenig oversized...


Danke schonmal..

Christian Seehase 12. Jul 2007 11:57

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Moin DelphiManiac,

Zitat:

Zitat von DelphiManiac
aber das Problem an dem modalen MessageDlg ist, dass es ja alles was im Hintergrund läuft (wie z.B.: einen Timer) anhält...

bei mir nicht. :gruebel:

DelphiManiac 12. Jul 2007 11:58

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Anscheinend geht
es doch, die Timerereignisse werden doch aufgerufen trotz MessageDlg!!!


Also SORRY nochmal


**********CLOSESD********************

DelphiManiac 12. Jul 2007 11:59

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Der Timer ist an einer anderen Stelle deaktiviert wordem
:oops:

Mein Fehler....

trotzdem danke

Christian Seehase 12. Jul 2007 16:00

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Moin DelphiManiac,

macht doch nichts.
Solche Fehler sind wohl jedem schon passiert.
(mir gerade erst gestern ;-))

DelphiManiac 12. Jul 2007 16:48

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Finde ich gut, das der Umgangston hier sehr freundschaftlich helfend ist,

das kenne ich von anderen Foren nicht so... das wird man sehr schnell angeblufft.
Und viele spielen sich sehr auf.

Das ist ja zum Glück hier nicht so.

Schönen Abend noch :-)

Christian Seehase 12. Jul 2007 17:05

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Moin DelphiManiac,

danke für das Lob.
Ich denke, dass ich hier für das ganze Team sprechen darf:
Wir gegen uns auch Mühe dass das so ist und bleibt.

Nicht zu vergessen:
Ohne unsere User die da mitspielen, geht das natürlich auch nicht.

angos 30. Okt 2009 08:50

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Hi,

ich kram den alten Thread nochmal aus :)

ich habe hier ein gleichartiges Problem und das einmal in einem Testprojekt weiter geprüft:

Delphi-Quellcode:
procedure TForm1.machwas;
var
  i: integer;
begin
  mmo.lines.add('Foo');
  for i := 0 to 300 do
  begin
    sleep(10);
    application.processmessages;
  end;
  mmo.lines.add('bar');
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
  if bInUse then
    Exit;

  bInUse := true;
  machwas;
  bInUse := false;
end;

procedure TForm1.btnClick(Sender: TObject);
begin
  form2.ShowModal;
end;

Wenn das Form2.Showmodal aufgerufen wird, während der TimerTimer gerade abgearbeitet wird, so wird diese Abarbeitung unterbrochen.
Der Timer wird zwar weiterhin neu aufgerufen, aber der aktuelle Timerdurchlauf wird erst nach dem Schließen des Formulars fortgesetzt. Kann man das irgendwie umgehen?

Grüße

r_amse_s 21. Nov 2009 16:29

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
mein Problem ist, wie kann man z.B. eine Gauge in das modale Fenster laufen lassen, solange die Tätigkeit im Hauptform durchgeführt wird...das geht mit Timers leider nicht
vor allem dann, wenn die Tätigkeit im Hauptform blockierend sich auswirkt (greife über COM interface auf eine dll).

geht das überhaupt ohne mehreren threads? wie schaut sowas aus?

danke!

himitsu 21. Nov 2009 17:11

Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
 
Es gibt nur eine VCL, welche sich um alle seine Fesnter, visuellen Komponenten und nebenbei auch noch alle anderen Messages an diese Fenster, bzw. den Hauptthread kümmert.

Wenn du eine blockierst, dann blockierst du alles.

ShowModal verarbeitet aber indern die Nachrichtenschleife (Application.ProgressMessages), weswegen andere Ereignisse, wie z.B. Timer noch laufen ... nur die Ereignisprozedur, in welcher das ShowModal aufgerufen wird, wird solange angehalten.
Auch eine Gauge sollte sich so ändern lassen.


Also wenn deine COM-Schnittstelle so blockierend wirkt, dann sollte sie in einen Thread ausgelagert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 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