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/)
-   -   Message nur kurz anzeigen (https://www.delphipraxis.net/185068-message-nur-kurz-anzeigen.html)

idefix2 12. Mai 2015 17:16

Message nur kurz anzeigen
 
Gibt es irgend etwas fertiges, um eine Nachricht nur ein paar Sekunden anzuzeigen und dann wieder automatisch auszublenden, ohne dass der User auf "Ok" klicken muss?
Oder muss ich da mit einem Timer herumfrickeln (Bin da vom Programmieren mit Autohotkey verwöhnt :) )?

mkinzler 12. Mai 2015 17:33

AW: Message nur kurz anzeigen
 
So etwas wie einen BalloonHint oder Toast?

himitsu 12. Mai 2015 18:11

AW: Message nur kurz anzeigen
 
Hint, BallonHint, MessageBoxTimeout, ..........


http://michael-puff.de/Programmierun...xTimeout.shtml

Sir Rufo 12. Mai 2015 18:17

AW: Message nur kurz anzeigen
 
Oder man baut sich einmal ein Dialog-Formular mit einem AutoCloseTimer und legt sich das in die Objekt-Ablage (da freut sich aber jetzt einer) und leitet sich davon die gewünschten ab und/oder erstellt sich davon selber ein paar Standard-Dialoge ... und schon ist es wie zu Hause ...

idefix2 12. Mai 2015 19:30

AW: Message nur kurz anzeigen
 
@himitsu
Ja, genau, so etwas: die MessageBoxTimeout werde ich verwenden, danke für den Link.

Luckie 12. Mai 2015 19:54

AW: Message nur kurz anzeigen
 
Ich weiß nicht, ob das eine gute Idee. Eine Messagebox will den Benutzer ja auf was hinweisen. Ich starte ein Programm. Das arbeitet. Ich gehe ka**en. Komme wieder. Und dann? Das Programm hat was angezeigt, die Nachricht ist weg.... Also warum denn was anzeigen, wenn es eh nicht wichtig war. Denn wenn es wirklich wichtig war, dann müsste man die Nachricht nicht automatisch schließen. Dann reicht auch ein Eintrag im Log oder so.

Delphi-Laie 12. Mai 2015 21:23

AW: Message nur kurz anzeigen
 
Meine Wenigkeit beschäftigte sich auch mal mit so etwas.

Delphi-Laie 12. Mai 2015 21:27

AW: Message nur kurz anzeigen
 
Luckie, wichtig ist es eben nur, wenn man vor dem Computer sitzt, wartet und sich langweilt, anstatt sich das nächste Bierchen aus dem Kühlschrank zu besorgen und/oder das vorige woanders abzulassen.

idefix2 12. Mai 2015 21:40

AW: Message nur kurz anzeigen
 
@Luckie: Manchmal ist das eine gute Idee :wink:

Es gibt einen Button PDF, beim Klick auf diesen Button füllt das Programm automatisch ein paar PDF Formulare mit Daten aus der Datenbank aus und legt die in einem Verzeichnis für späteren automatischen Mailversand ab. Das dauert ca 1/10 Sekunde, in der Zeit schafft der User es wahrscheinlich nur schwer, sich zum Ka**en zu verabschieden.
Irgendwie möchte ich ihm aber sagen, dass der Job erfolgreich erledigt worden ist, ohne ihn dabei dazu zu zwingen, vor dem Weiterarbeiten die Meldung mit Tastatur oder Maus zu quittieren. Programme, die auf den Klick auf einen Button keine unmittelbar erkennbare Reaktion zeigen, finde ich grauslich.

Luckie 12. Mai 2015 22:36

AW: Message nur kurz anzeigen
 
Ja, aber warum dann eine Messegabox, die ein Interaktion impliziert, wenn doch gar keine erforderlich ist? Schreib irgendwo was in grün hin, dass die Aktion erfolgreich war. Statusleiste. Fenstercaption. Oder sonst wo. Wenn du die Messagebox automatisch schleißt, habe ich ja gar so gut wie keine Rückmeldung, wenn ich sie nicht sehe. Wenn ich sie nicht sehe, warum auch immer, bin ich auch nicht schlauer als vorher.

Sir Rufo 12. Mai 2015 23:25

AW: Message nur kurz anzeigen
 
Also ich kenne auch Anzeigen, die nur für eine bestimmte Zeit auftauchen und dann wieder verschwinden (z.B. Email empfangen). Diese kann man wegklicken oder ignorieren und die verschwinden von alleine.

Wenn man den Verschwinden-Timer erst dann startet, wenn eine Maus-Aktion oder Tastendruck erfolgt (egal wo), denn hat man eigentlich so gut wie alles abgetütet.

Popov 12. Mai 2015 23:30

AW: Message nur kurz anzeigen
 
Naja, ob solche Messages sinnvoll sind oder nicht, das muss der Programmierer selber entscheiden.

Ich werde übriges seit etwa zwei Monaten von Kaspersky-Antivirus mit Massages terrorisiert. Wobei die ersten sechs Wochen es drum ging, dass die Testversion abgelaufen ist. Hier musste ich die Messages quittieren.

Vor zwei Wochen habe ich einen Lizenzschlüssel eingetragen, doch der Terror geht weiter. Denn ich habe es gewagt einige Schutzmechanismen zu deaktivieren, ich werde somit nicht zu 100% von Kaspersky geschützt. Ich befinde mich in permanenter Gefahr. Das zumindest Teilt mit eine Messagebox für etwa 3 Sekunden mit. Das wird von einem lauten Warnton begleitet, so dass ich jedes Mal einen Schrecken bekomme und immer fast von Stuhl falle. Dei Messagebox schließt sich nach drei Sekunden, drauf folgt eine zweite Messagebox ohne den Krach, die mir ebenfalls etwas mitteilen will. In der Regel bin ich noch von der ersten Messagebox so aufgewühlt und erschrocken, dass ich bisher nicht dazu gekommen bin zu lesen was da steht. Die schließt sich nach zwei Sekunden.

Dann habe ich Ruhe bis zum nächsten Computerstart. Das ist ein Beispiel für Messages die man nur kurz sehen kann :-D

Dejan Vu 13. Mai 2015 06:21

AW: Message nur kurz anzeigen
 
Soll die kurz angezeigte Nachricht modal oder nonmodal sein?
Ich würde mir -wie hier schon bemerkt- die UI-Metapher noch einmal gründlich überlegen: WAS soll damit dargestellt werden?

Fehlt Dir die Möglichkeit, ein nonmodales Fenster anzuzeigen und dann aus der laufenden Anwendung heraus mit Informationen zu besorgen? Ich kann mir vorstellen, das Du einfach nur einzelne Schritte einer längeren Operation darstellen willst. Korrekt?

Perlsau 13. Mai 2015 06:50

AW: Message nur kurz anzeigen
 
Zitat:

Zitat von idefix2 (Beitrag 1301287)
Es gibt einen Button PDF, beim Klick auf diesen Button füllt das Programm automatisch ein paar PDF Formulare mit Daten aus der Datenbank aus und legt die in einem Verzeichnis für späteren automatischen Mailversand ab. Das dauert ca 1/10 Sekunde, in der Zeit schafft der User es wahrscheinlich nur schwer, sich zum Ka**en zu verabschieden. Irgendwie möchte ich ihm aber sagen, dass der Job erfolgreich erledigt worden ist, ohne ihn dabei dazu zu zwingen, vor dem Weiterarbeiten die Meldung mit Tastatur oder Maus zu quittieren. Programme, die auf den Klick auf einen Button keine unmittelbar erkennbare Reaktion zeigen, finde ich grauslich.

Mach's dir doch nicht schwerer, als es ist: Wieso nicht einfach ein ShowMessage? Wenn der Anwender sowieso gerade dabei ist, einen Button zu drücken, um schnell ein PDF zu speichern, hat er die Hand ja eh schon auf der Maus und klickt das dann auch schnell weg. Oder wenn er's via Menüeintrag macht, drückt er danach einfach Enter und weiter geht's. Auf diese Weise ist gesichert, daß er die Rückmeldung auch liest bzw. sieht. Bei Mißerfolg meldest du das dann auf dieselbe Weise. Oder du trägst in der Statusbar ein: PDF-Datei am 13.05.2015 um 07:48 erfolgreich erstellt. Diese Meldung verschwindet wieder, wenn du den nächsten Datensatz anzeigst oder sie zeigt an, wann der nächste Datensatz als PDF gespeichert wurde.

uligerhardt 13. Mai 2015 07:15

AW: Message nur kurz anzeigen
 
Ich verwende für solche Zwecke dxAlertWindows von DevExpress - das ist so ähnlich wie die Mailbenachrichtigungen von Outlook. Falls du kein DevEx hast, gibt's sowas sicher auch bei den Jedis.

Delphi-Laie 13. Mai 2015 07:24

AW: Message nur kurz anzeigen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1301300)
Also ich kenne auch Anzeigen, die nur für eine bestimmte Zeit auftauchen und dann wieder verschwinden (z.B. Email empfangen). Diese kann man wegklicken oder ignorieren und die verschwinden von alleine.

Was für Anzeigen - Messageboxen?

Betreibt man Windows 2000 mit abgeschaltetem Swapspeicher, kommt bei dessen Start eine Meckermeldung, daß der virtuelle Speicher nicht ausreiche - betreiben kann man Windows 2000 natürlich dennoch. Diese Meldung sieht wie eine (große) Messagbox aus. Ob es eine ist, weiß ich nicht. Jedenfalls verschwindet diese auch bei Nichtklicken nach wenigen Minuten von allein, und Windows 2000 startet vollständig.

Perlsau 13. Mai 2015 07:30

AW: Message nur kurz anzeigen
 
Ich glaube, das was Sir Rufo meint, ist sowas wie TJvDesktopAlertLocation.

Sir Rufo 13. Mai 2015 07:41

AW: Message nur kurz anzeigen
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1301315)
Zitat:

Zitat von Sir Rufo (Beitrag 1301300)
Also ich kenne auch Anzeigen, die nur für eine bestimmte Zeit auftauchen und dann wieder verschwinden (z.B. Email empfangen). Diese kann man wegklicken oder ignorieren und die verschwinden von alleine.

Was für Anzeigen - Messageboxen?

Es stellt sich doch nur die Frage ob diese Anzeige modal oder nicht modal sein soll. Pauschal kann man nicht beantworten ob das nun gut oder schlecht ist. Es kommt eben darauf an, was damit erreicht werden soll.

In diesem konkreten Fall (Arbeit ist erledigt) würde ich die Meldung - wenn es denn über ein Meldungs-Fenster kommen soll - in einem nicht modalen Fenster anzeigen.

Ein modales Fenster findet man sehr häufig, wenn z.B. eine Aktion ablaufen soll und der Benutzer die Möglichkeit zum Abbruch haben soll, weil das z.B. seine Arbeit stört.

Der Möglichkeiten gibt es viele und eben auch unterschiedliche Szenarien, wo jede einzelne Möglichkeit gut oder schlecht ist. Das gilt es eben abzuwägen.

jobo 13. Mai 2015 07:45

AW: Message nur kurz anzeigen
 
Ich hab auch noch einen Vorschlag, nein sogar mehrere.
Die Idee finde ich gut (Button, Feedback, ohne "Störung")
Also wenn es so flott geht,
  • warum nicht eine Minianimation (auch ca 1/10 Sekunde oder so) die den erfolgreichen Vorgang optisch anzeigt.
  • plus eine normale Messagebox mit Bestätigung, wenn es nicht funktioniert hat! (Wird der User dann vielleicht nie im Leben sehen)
  • plus- wie schon genannt- eine Loghistorie, z.B. in der Statusbar, bestehend aus letzte Meldung immer sichtbar, alle Meldungen chronologisch, Anzeige bei Klick
Das ganze könnte man so gestalten, dass es für alle Userinteraktion (Benachrichtigungen, Fehler, ..) ein einheitliches Konzept gibt, was der User nach 2x benutzen kapiert hat.

Popov 13. Mai 2015 09:42

AW: Message nur kurz anzeigen
 
Ich glaube Idefix2 hat bereits seine Lösung. Die Diskussion hier geht nur noch drum ob sowas sinnvoll ist oder nicht.

idefix2 14. Mai 2015 11:36

AW: Message nur kurz anzeigen
 
Beinahe.
Aber irgendwie komme ich mit den verschiedenen Stringtypen, die man an Windows übergeben muss, nicht zu Rande. So funktioniert es jedenfalls nicht:

Delphi-Quellcode:
MessageBoxTimeOut(Handle, PWideChar(WideString('Die PDF-Formulare wurden ausgefüllt und abgelegt')),
           PWideChar(WideString('PDF ausfüllen')), MB_OK or MB_ICONINFORMATION, 0, 3000);
Und so auch nicht:

Delphi-Quellcode:
MessageBoxTimeOut(Handle, PChar('Die PDF-Formulare wurden ausgefüllt und abgelegt'),
           PChar('PDF ausfüllen'), MB_OK or MB_ICONINFORMATION, 0, 3000);

Es erscheint in beiden Fällen eine wunderschöne Messagebox, die nach drei Sekunden wieder verschwindet, die zeigt aber in der Caption nur ein "P", und als Meldung nur ein "D". Die anderen Zeichen der auszugebenden Strings werden verschluckt.

:evil:

Diverse andere Varianten, die ich probiert habe, lassen sich wegen eines Typkonflikts gar nicht kompilieren.

himitsu 14. Mai 2015 11:38

AW: Message nur kurz anzeigen
 
MessageBoxTimeOutA oder MessageBoxTimeOutW :stupid:


Eigentlich sollte das doch verständlich sein?
Beispiel:
MessageBox + PChar
MessageBoxA + PAnsiChar
MessageBoxW + PWideChar
Und es kommt natürlich nicht auf den Namen im Delphi an, sondern auf den Namen bei External, wenn er definiert wurde.

idefix2 14. Mai 2015 12:04

AW: Message nur kurz anzeigen
 
Danke, jetzt klappt es.
Und du hast ja recht, eigentlich sollte es verständlich sein. :wink:


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