Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um? (https://www.delphipraxis.net/175966-zurueck-zur-standard-ansicht-nach-x-sekunden-idle-wie-setze-ich-das-um.html)

Der schöne Günther 2. Aug 2013 21:49

"Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
An sich eine wohl ziemlich triviale Angelegenheit: Der Benutzer kann über Popup-Dialoge Werte eingeben, Seitenfenster aufklappen, von der Hauptseite auf andere "Seiten" wechseln, ...

Ich möchte, dass nach bsp. 10 Sekunden Idle eine definierte Standardansicht wiederhergestellt wird. Ich definiere "10 Sekunden Idle" als "10 Sekunden lang keine Eingabe vorgenommen: Nicht irgendwo auf den Bildschirm getippt". Ich möchte nicht für jede VCL-Komponente in jedem möglichen Event einen laufenden Timeout-Wert zurücksetzen. Dann vergesse ich das mal bei einer Komponente und schon läuft der Timeout weiter obwohl der Benutzer gerade auf dieser Komponente herumpatscht.

Wie erschlage ich das am besten? Ein (systemweiter) Maushook? Kann ich mit der Auswertung der Nachrichten die an mein Fenster gehen etwas anfangen? Die Anwendung läuft voraussichtlich ausschließlich als Kiosk-Anwendung, Windows-Dialoge oder andere Anwendungen werden nie sichtbar sein.

Falls noch Ideen und Erfahrungen gibt, dass man sich das "Merken" und das reibungslose Zurückkehren in einen fest definierten "optischen Ursprungszustand" einfach machen kann und worauf man achten muss - Dann nehme ich das natürlich auch gerne dankend an 8-)

Sir Rufo 2. Aug 2013 22:21

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Mit einem Maus- und Tastatur-Hook

jaenicke 2. Aug 2013 22:22

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Es gibt da so eine schöne API-Funktion GetLastInputInfo: ;-)
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Sir Rufo 2. Aug 2013 22:25

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Zitat:

Zitat von jaenicke (Beitrag 1223343)
Es gibt da so eine schöne API-Funktion GetLastInputInfo: ;-)
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Die scheint aber global zu sein ... könnte aber für das beschriebene Szenario unerheblich sein :)

Der schöne Günther 2. Aug 2013 22:32

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Danke schon einmal für die Antworten.

Was mir erst jetzt noch einfällt ist folgende (unter Umständen) greifende Einschränkungen: Die Anwendung wird zwar 99% der Zeit über einen Touchscreen bedient, eventuell liegen aber in einer Kiste Maus und Tastatur. Jetzt würde es mich nicht wundern, wenn bsp. Erschütterungen die Maus immer einen Millimeter zittern lassen und das so Timeout-Funktionen aushebelt.

Ein Maushook hätte hier im Gegensatz zu
Delphi-Quellcode:
GetLastInputInfo
wohl den Unterschied, dass ich hier reine Mausbewegungen ohne gedrückte Taste (Finger auf dem Glas) schon einmal aussortieren könnte...

Nersgatt 3. Aug 2013 06:46

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Ich hab sowas auch an einem Touchscreengerät schon mal mit einem Maushook umgesetzt. Das hat gut funktioniert.
Probleme mit Erschütterungen hatte ich nie. Und meine Touchscreens hingen in Hallen wo auch mal ein Trecker oder ein Gabelstapler vorbeifährt.

Der schöne Günther 3. Aug 2013 06:51

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Das war auch kein etablierte Tatsache sondern nur so eine fixe Idee. Gut zu wissen dass man damit wohl nicht rechnen muss :)

ConnorMcLeod 5. Aug 2013 06:12

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Wie wäre es mit TApplicationEvents + Timer?
1) OnIdle: Timer erfinden+starten
2) OnMessage wenn WM_MOUSEFIRST .. WM_MOUSELAST, WM_KEYFIRST .. WM_KEYLAST, dann Timer wieder zerstören, falls Assigned
3) OnTimer: Reset

Perlsau 5. Aug 2013 07:25

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Zitat:

Zitat von Nersgatt (Beitrag 1223356)
Probleme mit Erschütterungen hatte ich nie.

Ich erlebe häufig das Phänomen, daß sich der Mauszeiger meiner optischen Maus selbständig bewegt. Nach kurzem Hochheben und Niedersetzen der Maus steht der Zeiger dann wieder still ... Ein Austausch der Maus brachte nichts und zeigte das Phänomen weiterhin ...

Nersgatt 5. Aug 2013 07:27

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Sowas hab auch ab und zu. Aber nur wenn ich bei Kunden an spiegelnden Tischen/Glastischen oder weißen Tischen arbeiten muss. Einfach den Collegeblock drunterlegen und das Thema ist erledigt.

Der schöne Günther 5. Aug 2013 08:22

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Oder den Exorzisten rufen. Dieser allein löst das ursprüngliche Problem aber nicht, dafür stehen mittlerweile diese drei Wege zur Auswahl:
  • WinAPI::GetLastInputInfo - Keine Kontrolle Eingaben (Mauszucken) auszufiltern, arbeitet mit TickCounts
  • Windows-Messages abfangen - Eingaben lassen sich beliebig filtern, allerdings auf Anwendung selbst beschränkt
  • Maus/Tastatur-Hook - Sessionweit einsetzbar, sehr flexibel


Bislang sieht für mich der Hook am besten aus: Bei den Messages sehe ich noch das Problem, dass ich keine Eingaben mehr mitbekomme, wenn beispielsweise ein Drucken-Dialog aufgemacht wird (?) oder jemand beispielsweise Teamviewer gestartet haben wollte und erst einmal dort auf der Oberflächer herumdoktort.

Perlsau 5. Aug 2013 08:55

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Zitat:

Zitat von Nersgatt (Beitrag 1223470)
Sowas hab auch ab und zu. Aber nur wenn ich bei Kunden an spiegelnden Tischen/Glastischen oder weißen Tischen arbeiten muss. Einfach den Collegeblock drunterlegen und das Thema ist erledigt.

Bei mir ist's genau umgekehrt: Seit ich die Maus auf dem blanken Schreibtisch mit weißgrauer Oberfläche rumschiebe, kommt das nicht mehr vor. Zuvor hatte ich's mit Mauspad und allen möglichen Unterlagen probiert. Der zusätzliche Vorteil der jetzigen Lösung: Der Schreibtisch läßt sich leicht reinigen.

jaenicke 5. Aug 2013 13:16

AW: "Zurück zur Standard-Ansicht nach X Sekunden Idle" - Wie setze ich das um?
 
Zitat:

Zitat von Perlsau (Beitrag 1223474)
Bei mir ist's genau umgekehrt: Seit ich die Maus auf dem blanken Schreibtisch mit weißgrauer Oberfläche rumschiebe, kommt das nicht mehr vor.

Seit ich nur noch etwas bessere Mäuse und entsprechende Mousepads benutze, hatte ich das Problem nicht mehr. Bei günstigeren Mäusen hatte ich das öfter gehabt, allerdings stand da auch oft dran, dass es nur auf ganz bestimmten Oberflächen funktioniert.


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