Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Vom Programmablauf abhängig schließende Meldungsbox (https://www.delphipraxis.net/123694-vom-programmablauf-abhaengig-schliessende-meldungsbox.html)

Delphi-Laie 6. Nov 2008 18:59


Vom Programmablauf abhängig schließende Meldungsbox
 
Hallo Delphianer!

Ihr alle kennt das Problem: Man startet ein Programm (oder im Verlaufe seines späteren Ablaufes), und es tut sich - scheinbar - nichts. Abgestürzt? Nein, es hat zu tun, ein Zustand, der irgendwann ein Ende hat, doch wenn man das nicht weiß, hat man weniger Geduld, darauf zu hoffen und zu warten.

Das Problem, eine Meldung wegklicken zu müssen, sonst geht es nicht weiter, läßt sich z.B. mit Luckis selbstschließenden Messageboxen lösen, jedoch wissen die nicht, wann es wirklich im Programmablauf weitergeht (sofern ich das richtig verstand, man muß ja eine "Lebensdauer" bis zur selbständigen Schließung angeben).

Ich habe mir folgende beispielhafte, individuell natürlich anpaßbare Lösung als ewiger Delphi-Laie selbst zusammengepfriemelt:

Delphi-Quellcode:
var Form:TForm;
  Label1:TLabel
.
.
.
Form:=TForm.Create(Application);
Form.Width:=112;
Form.Height:=25;
Form.Left:=(Screen.Width-Form.Width) div 2;
Form.Top:=(Screen.Height-Form.Height) div 2;
Form.BorderStyle:=bsNone;
Form.Color:=clFuchsia;
Label1:=TLabel.Create(Form);
Label1.parent:=Form;
Label1.Caption:='Bitte warten...';
Label1.Font.Height:=24;
Label1.Font.Color:=clYellow;
Form.FormStyle:=fsStayOnTop;
Form.show;
Form.Refresh;

{blabla zeitbeanspruchende Programmausführung} 
 
Form.Destroy
Wenn der Computer allerdings sehr schnell ist, dann kann es durchaus sein, daß das Meldungsfenster nur "aufblitzt" und trotz des kurzen Textes nicht (vollständig) gelesen werden kann, mithin Neugier weckt, die es nicht befriedigen kann. Dem kann man natürlich mit einem zusätzlichen Sleep abhelfen (z.B. 1000 ms) abhelfen, das verursacht natürlich aber auch unnötigen Verzug im Ablauf (auch wenn es nur 1 s ist). Den zeitbeanspruchenden Code und/oder dieses Meldungsfenster (erzeugen, bewahren und schließen) in (einen) einzelne(n) Thread(s) auszulagern, war mir dann aber doch zu sehr mit Kanonen auf Spatzen geschossen....

Mr_G 6. Nov 2008 19:34

Re: Vom Programmablauf abhängig schließende Meldungsbox
 
Auch wenn du keine Frage gestellt hast ;):
Ich würde das ganze mit einer Statusbar lösen. Dort könntest du einfach den aktuellen Zustand anzeigen (evtl. mit so Pünktchen, damit man weiß das es voran geht...).

Delphi-Laie 6. Nov 2008 20:04

Re: Vom Programmablauf abhängig schließende Meldungsbox
 
Danke, gute Idee, die ich noch nicht kannte.

In dem Programm, in dem ich das verwende, ist allerdings der Anteil der schon erfolgen Abarbeitung nicht zwischenzeitlich quantifizierbar, denn es ist eine Enumeration einer vorab unbekannten Anzahl Objekte.

Mr_G 6. Nov 2008 20:11

Re: Vom Programmablauf abhängig schließende Meldungsbox
 
Zitat:

Zitat von Delphi-Laie
In dem Programm, in dem ich das verwende, ist allerdings der Anteil der schon erfolgen Abarbeitung nicht zwischenzeitlich quantifizierbar, denn es ist eine Enumeration einer vorab unbekannten Anzahl Objekte.

Ich dachte eher an so eine "Pünktchen-Geschichte" damit man weiß, dass das Programm rechnet: . - .. - ... - usw.
Eine Sache die ich mir noch vorstellen könnte wäre ein Timer, sodass das Form mindestens x Sekunden offen bleibt oder ein Button der auftaucht/klickbar ist wenn du fertig bist (Im Label könnte/müsste das dann auch dann stehen). Ich finde aber genaugenommen beides eher suboptimal, da der Benutzer dabei bei seiner Arbeit unnötig "unterbrochen" wird.

jfheins 6. Nov 2008 20:44

Re: Vom Programmablauf abhängig schließende Meldungsbox
 
Zitat:

Zitat von Delphi-Laie
Ihr alle kennt das Problem: Man startet ein Programm (oder im Verlaufe seines späteren Ablaufes), und es tut sich - scheinbar - nichts. Abgestürzt? Nein, es hat zu tun, ein Zustand, der irgendwann ein Ende hat, doch wenn man das nicht weiß, hat man weniger Geduld, darauf zu hoffen und zu warten.

Ich zitiere mal aus dem msdn:
Zitat:

Use this message when you do not know the amount of progress toward completion but wish to indicate that progress is being made.
oder zu Deutsch:
Zitat:

Benutzen Sie diese Nachricht, wenn sie den Fortschritt nicht wissen, aber deutlich machen wollen, dass Fortschritt gemacht wird.
Gefunden da: PBM_SETMARQUEE

Eine Progressbar mit Marqueestyle ist dazu also perfekt geeignet ;)

Dazu am besten in der Statusleiste neben der Progressbar ein kleiner Text, und den Button disabeln und alles ist gut :)


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