![]() |
Close in Onshow oder ein Statusfenster
Hallo zusammen,
will ein kleines Proggi schrieben, mit dem man mit einem externen Mikrocontroller über die RS232 kommunizieren kann. Wie man das shcon so oft gesehen hat, soll der Datentransfer in einer extra Form mittels einer Progressbar dargestellt werden. Sobald Transfer beendet, schliesst sich das Statusfenster wieder selbst. Leider geht das nciht so wie ich wollte... So hatte ich es versucht: Mainprogramm: Transferform.showmodal; Im Onshow Event der Transferform: .... tu dies und das... und zeig den Progressbar an... Close; Das Funktioniert soweit, dass die Form geöffnet wird und alles funktioniert. Bis auf den Close. Das Fnester bleibt offen. Kann mir jemand helfen? Wie man so was macht? Die einzigste Lösung die mir eingefallen ist, wäre ein Timer, der als letztes gestartet wird und dann ziemlich schnell zu schlägt und das Fenster schliesst. Aber muss doch auch einfacher gehen. Gruss Günter |
Wenn die Progressbar synchron läuft, dann mach doch:
Code:
if Progressbar1.Max = Progressbar1.Position then
Close; |
Das Problem ist, dass der Befehl Close; nicht im OnShow Event ausgeführt werden kann. Ist generell kein hervorragender Bereich, um den Fortschritt anzuzeigen. Aber wie dem auch sei, mit folgendem Code, kannst Du dem Fenster mitteilen, sich als nächstes zu schließen.
Code:
:cat:
PostMessage(Handle, WM_Close, 0, 0);
|
Danke Sakura für die Hilfe...
Ich weiss dass es nicht ideal ist, in Onshow so viele Dinge zu machen. Aber leider manchmal ne Notlösung. Oder gibt es da noch andere wege, wenn man ein Modales Fenster öffnen will und dann darin einen Prozess anstossen möchte ohne eine Usereingabe? Bin für alle Ratschläge offen. Gruss Günter |
Ähnlich der PostMessage könntest Du weitere Nachrichten versenden. Beispiel (ungetestet, sollte aber so funktionieren)
Code:
Ich hoffe, dass das weiterhilft.
const
WM_StartMyProcess = WM_USER + 1; type TForm1 = class(TForm) private procedure WMStartMyProcess(var Msg: TMessage); message WM_StartMyProcess; ... end; .... TForm1.WMStartMyProcess; begin ... der Code aus Deinem OnShow Event Handler ... PostMessage(Handle, WM_Close, 0, 0); end; TForm1.OnShow(Sender: TObject); begin PostMessage(Handler, WM_StartMyProcess, 0, 0); end; |
Wie wäre es damit:
Code:
Transferform.Show;
try Application.ProcessMessages; // Zeit zum Anzeigen des Formulars geben Transferform.TransferData; // hier die Daten übertragen finally Transferform.Close; end; |
@jbg:
Er wollte aber ein modales Form, Show ist nicht modal... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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