AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi "Bitte warten Fenster" anzeigen - andere Eingaben blockieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Bitte warten Fenster" anzeigen - andere Eingaben blockieren

Ein Thema von Ares · begonnen am 17. Jan 2008 · letzter Beitrag vom 18. Jan 2008
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

"Bitte warten Fenster" anzeigen - andere Eingaben

  Alt 17. Jan 2008, 13:59
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
  Mit Zitat antworten Zitat
b1zZ

Registriert seit: 8. Aug 2005
Ort: Wischhafen
52 Beiträge
 
Delphi 2009 Enterprise
 
#2

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 17. Jan 2008, 14:02
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.
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#3

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 17. Jan 2008, 14:10
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:
  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;
Das Programm läuft zwar, aber der Panel wird nicht angezeigt... Eine Idee was ich falsch mache?

Besten Dank
Ares
  Mit Zitat antworten Zitat
b1zZ

Registriert seit: 8. Aug 2005
Ort: Wischhafen
52 Beiträge
 
Delphi 2009 Enterprise
 
#4

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 17. Jan 2008, 14:22
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 17. Jan 2008, 14:33
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;
Andreas
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 17. Jan 2008, 14:39
Vielleicht kannst du auch von deinem Wartefenster aus die zeitintensive Operation starten, sei es festkodiert, per Ereignis oder per Callback.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 17. Jan 2008, 15:09
Hallo,

siehe mein letztes Post hier:

http://www.delphipraxis.net/internal...ht=tformstatus

TForm_Status ist ein Form,
wo zum Bsp. steht Bitte warten


Heiko
Heiko
  Mit Zitat antworten Zitat
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#8

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 18. Jan 2008, 10:38
Danke an alle! Die Lösung von shmia funktioniert prima!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: "Bitte warten Fenster" anzeigen - andere Einga

  Alt 18. Jan 2008, 12:04
Hallo,

das gleiche macht auch mein Vorschlag,
nur dass man das StatusForm für veschiedene "Bitte warten ..."
verwenden kann.


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 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