![]() |
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.. |
Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
Moin DelphiManiac,
Zitat:
|
Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
Anscheinend geht
es doch, die Timerereignisse werden doch aufgerufen trotz MessageDlg!!! Also SORRY nochmal **********CLOSESD******************** |
Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
Der Timer ist an einer anderen Stelle deaktiviert wordem
:oops: Mein Fehler.... trotzdem danke |
Re: MessageDlg modal, aber Hintergrundtätigkeit laufen lasse
Moin DelphiManiac,
macht doch nichts. Solche Fehler sind wohl jedem schon passiert. (mir gerade erst gestern ;-)) |
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 :-) |
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. |
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 |
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! |
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 02:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz