![]() |
"Bitte warten Fenster" anzeigen - andere Eingaben
Hallo!
ich habe ja eben schon in meinem anderen Thread beschrieben, dass ich in meinem Programm ein "Bitte warten Fenster" anzeigen möchte. Nachdem nun mit der Animation alles klappt bin ich auf ein weiteres Problem gestoßen. Wenn ich das Fenster als normales Form erstelle kann ich dies zwar problemlos über dem über dem aktivem Hauptfenster anzeigen, der Benutzer könnte aber einfach in das Hauptfenster klicken, es so in den Vordergrund holen und bedienen wie er will. Dies kann ich vermeiden in dem ich das Warten-Fenster nicht mit Show() sonder mit ShowModal() aufrufen. Dann ist das Hauptfenster solange gesperrt, wie das Warte-Fenster angezeigt wird. So soll es sein. ABER: Nun wartet das Programm so lange bis das Warte-Fenster geschlossen wird und arbeitet erst dann weiter. Während das Warte-Fenster angezeigt wird, passiert sonst nichts weiter im Programm. Das ist natürlich nicht sinn der Sache. Das Warte-Fenster soll angezeigt werden WÄHREND das Programm arbeitet... Habt Ihr eine Idee, ich ich das ShowModal-Verhalten erhalte ohne den das das Programm damit mit der sonstigen Arbeit aufhört? Besten Dank Ares |
Re: "Bitte warten Fenster" anzeigen - andere Einga
Du könntest zB. statt einer Form einfach ein Panel einblenden, und die Maus in diesem Panel solange "gefangen" halten bis das Programm geladen/feritg ist. In diese Richtung hätte ich es zumindenst realisiert.
|
Re: "Bitte warten Fenster" anzeigen - andere Einga
Die Maus im Panel gefangen zu halten ist keine Lösung. Der Benutzer soll sein System verwenden können, nur eben kurzzeitig das Programm nicht.
Mit dem Panel habe ich es auch schon versucht. Ich will das ganze aber als allgemeinen Dialog realisieren, den ich an verschiedenen Programmstellen verwenden kann. Ich bin daran gescheitert, dass ich nicht weiß wie ich den Panel dann an die richtige Stelle zeichne. Ich habe es so versucht:
Delphi-Quellcode:
Das Programm läuft zwar, aber der Panel wird nicht angezeigt... Eine Idee was ich falsch mache?
TWaitDlg = class(TObject)
protected FOwner : TComponent; Panel : TFlatPanel; Label1 : TLabel; Label2 : TLabel; Animation : TAnimate; public constructor Create(Owner: TComponent); procedure Show; procedure Hide; end; implementation {$R *.dfm} uses Math; constructor TWaitScreenDlg.Create(Owner: TComponent); begin Panel := TPanel.Create(Owner); Panel.BringToFront; // ... Andere Teile des Panels erstellen Panel.Visible := false; end; procedur TWaitScreenDlg.Show; begin Panel.visable := true; end; procedur TWaitScreenDlg.Hide; begin Panel.visable := false; end; ============== var dlg: TWaitDlg; begin dlg := TWaitDlg.Create(MainForm); // dlg := TWaitDlg.Create(EinPanel); dlg.Show; TuWas(); dlg.Hide; end; Besten Dank Ares |
Re: "Bitte warten Fenster" anzeigen - andere Einga
Du könntest ja vielleicht eine Art Layer drüber legen, zB. ein Bild oder sowas in der Art.
Ein Panel in der Mitte und aussen rum sieht man noch leicht verschwommen die Anwendung. Somit kannst du das System weiter nutzen und dein prog kann in ruhe zu Ende laden. Und wenn du die "Komponente" mit BringToFront ganz nach vorn holst, kannst du diese auch überall in deinem Programm benutzen. |
Re: "Bitte warten Fenster" anzeigen - andere Einga
Du kannst mal folgendes probieren:
Delphi-Quellcode:
FWindowList:Pointer;
procedure TImportForm.ShowSemiModal; begin // Formular semi-modal machen FWindowList:= DisableTaskWindows(self.Handle); Show; end; procedure TImportForm.FormHide(Sender: TObject); begin if Assigned(FWindowList) then begin // Semi-Modalität aufheben EnableTaskWindows(FWindowList); FWindowList := nil; end; end; |
Re: "Bitte warten Fenster" anzeigen - andere Einga
Vielleicht kannst du auch von deinem Wartefenster aus die zeitintensive Operation starten, sei es festkodiert, per Ereignis oder per Callback.
|
Re: "Bitte warten Fenster" anzeigen - andere Einga
Hallo,
siehe mein letztes Post hier: ![]() TForm_Status ist ein Form, wo zum Bsp. steht Bitte warten Heiko |
Re: "Bitte warten Fenster" anzeigen - andere Einga
Danke an alle! Die Lösung von shmia funktioniert prima!
|
Re: "Bitte warten Fenster" anzeigen - andere Einga
Hallo,
das gleiche macht auch mein Vorschlag, nur dass man das StatusForm für veschiedene "Bitte warten ..." verwenden kann. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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