Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fenster: Bitte warten (https://www.delphipraxis.net/81218-fenster-bitte-warten.html)

kluckweb 22. Nov 2006 19:16


Fenster: Bitte warten
 
Hallo zusammen,

ich habe folgendes sehr merkwürdiges Problem:

Ich würde gerne ein Fenster mit Bitte warten einblenden, wenn eine Routine im Hintergrund läuft.
Wenn ich dazu ein Formular machen und das dann öffne und nach der Routine wieder schließe wird das Fenster zwar geöffnet, aber das Image, welches sich in dem Formular befindet wird nicht angezeigt. Ich habe es alternativ mit Labels versucht. Die werden auch nicht angezeigt.

Es wird wirklich nur die reine Form, ohne die darauf befindlichen Elemente angezeigt.

Rufe ich das Formular dann aber per Button mal auf (zu Testzwecken) werden alle Inhalte richtig dargestellt.

Daher meine Frage:

Hat jemand entweder eine Idee, woran dieser merkwürdige Fehler liegen könnte oder wenn nicht, vielleicht eine Idee, wie man so ein "Bitte warten" Fenster realisieren könnte, während eine Routine weiter läuft?

Danke für Eure Hilfe.

mkinzler 22. Nov 2006 19:17

Re: Fenster: Bitte warten
 
Zeige mal etwas Code.

kluckweb 22. Nov 2006 19:23

Re: Fenster: Bitte warten
 
Hier ein Auszug aus dem Code:

Delphi-Quellcode:

If Frage.stellen('Sind Sie sicher, dass Sie Uploaden möchten?') then Begin

  Bittewarten.Show;
  IdFTP1.Host := 'www.MEINESEITE.de' ;
  IdFTP1.Username := 'webYY';
  IdFTP1.Password := 'abcdefgh';
  IdFTP1.Connect;
  IdFTP1.ChangeDir('/html/dateiupload');


  idftp1.put('datei.php',false);
  IdFTP1.Quit;
  IdFTP1.Disconnect;
  Bittewarten.Close;
  showMessage('Der Upload war erfolgreich');

mkinzler 22. Nov 2006 19:25

Re: Fenster: Bitte warten
 
Gib dem Fenster zwischendurch mal die Chance auf Messages zu reagieren.

jakobwenzel 22. Nov 2006 19:27

Re: Fenster: Bitte warten
 
Nach dem Show noch ein Bittewarten.Update.

Hintergrund:
Wenn das Fenster dargestellt wird, sendet Windows eine Nachricht, dass das Fenster gezeichnet werden soll an das Prog. Da aber der Download noch läuft wird die Nachricht noch nicht abgeholt.

Ein Application.ProcessMessages hätte den gleichen Effekt.
Wenn du das Application.ProcessMessages ins idFTP1.OnWork schreibst, wird es immer wieder ausgeführt und deine Anwendung bleibt bedienbar (wenn der Upload länger dauert kann man so dann zB einen Abbrechen-Schalter einbauen, ohne das Application.ProcessMessages käme der Klick erst nach der Fertigstellung des Uploads an)

EDIT: Da bemüht man sich so, und dann is man zu lahm :roll: :mrgreen:

kluckweb 22. Nov 2006 19:28

Re: Fenster: Bitte warten
 
Was meinst DU denn bitte mit "auf Messages reagieren"?

Und was hat das denn mit dem fehlenden Inhalt zu tun?

jakobwenzel 22. Nov 2006 19:45

Re: Fenster: Bitte warten
 
Windows sendet Nachrichten an das Programm, u.a. dass es sich doch bitte zeichnen möge. Die werden aber nicht direkt abgeholt, weil das Programm noch in der Prozedur hängt und quasi keine Zeit hat, die Nachrichten abzuholen. Und mit Application.ProcessMessages wird halt das Abholen der Nachrichten erzwungen. Und wenn du das in das OnWork von der FTP-Komponente schreibst, wird das halt in regelmäßigen Schritten während des Uploads aufgerufen und die App bleibt bedienbar. (Auch gut für Fortschrittsbalken)

kluckweb 23. Nov 2006 13:22

Re: Fenster: Bitte warten
 
Hi,

vielen Dank für Eure Hilfe.

Es lag wirklich am fehlenden .update Befehl.

Nun läuft es.


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