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/)
-   -   VCL OnGesture/GestureManager: immer "eins hinterher"? (https://www.delphipraxis.net/202049-vcl-ongesture-gesturemanager-immer-eins-hinterher.html)

Bbommel 23. Sep 2019 11:24

VCL OnGesture/GestureManager: immer "eins hinterher"?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Eigentlich wollte ich für einen Freund nur "mal schnell" ein kleines Programm schreiben, mit dem er beim Sport den Spielstand anzeigen lassen kann. Wunsch dabei war, dass man mit Touch-Gesten dem Heim- oder Gast-Team einen Punkt geben (oder abziehen) kann. "Sache von 'ner Stunde", habe ich mir gedacht. Aber denkste - entweder bin ich zu blöd, die Touch-Funktionen von Delphi richtig zu nutzen oder da steckt ein fieser Bug drin.

Idee war: wischt man in der linken Bildschirmhälfte mit einem Finger nach oben, bekommt die Heimmannschaft einen Punkt, in der rechten Hälfte nach oben wischen führt zu einem Punkt für die Gäste. Analog wird bei einem Wisch nach unten ein Punkt abgezogen. Problem: im fertigen Programm wische ich links, dennoch bekommt der Gast einen Punkt. Wische ich dann noch mal links, bekommt (wie erwartet) die Heimmannschaft einen Punkt, noch mal links, wieder Heim. Wische ich dann rechts, bekommt wieder die Heimmannschaft den Punkt, soll sie aber natürlich nicht. Nochmal rechts, dann erst geht der Punkt an den Gast.

Der Fehler tritt sowohl auf, wenn man die Geste für das Form als Ganzes auswertet (und dann an der x-Position entscheidet, ob links oder rechts), als auch, wenn man mit zwei Labels arbeitet und diesen getrennt ein OnGesture zuweist - es wird dann das Event für das jeweilige Label immer um eins versetzt ausgeführt.

Im Anhang findet ihr ein einfaches Demoprogramm, das einfach nur die x-Position ausgibt, wenn man auf dem Formular mit dem Finger nach oben oder unten wischt. Man sieht, dass die Position immer eins hinterher ist.

Getestet sowohl mit Delphi 10.2.3 als auch 10.3.2 auf einem Surface mit Windows 10 (ohne VM). Könnt ihr das bei euch nachvollziehen? Mache ich etwas falsch oder ist es ein Bug in der VCL?

Ach, wichtig noch: der Fehler tritt nicht auf, wenn man die Geste mit der Maus emuliert, dann ist alles korrekt. Nur, wenn man wirklich mit dem Finger die Geste ausführt, zeigt sich der Effekt.

Der schöne Günther 23. Sep 2019 11:31

AW: VCL OnGesture/GestureManager: immer "eins hinterher"?
 
Kannst du das kompilierte Programm auch hochladen?

Bbommel 23. Sep 2019 11:39

AW: VCL OnGesture/GestureManager: immer "eins hinterher"?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Klar, wenn es hilft, rauszufinden, ob es an meinem Surface liegt oder allgemein auftritt. :-) Ist im Anhang dieses Beitrags.

Bbommel 24. Sep 2019 09:39

AW: VCL OnGesture/GestureManager: immer "eins hinterher"?
 
Hallo zusammen,

offenbar haben jetzt nicht sooooo viele Efahrung mit Gesten bei der VCL. ;-) Insofern könnte es ja tatsächlich sein, dass dort ein Fehler schlummert, den einfach länger niemand bemerkt hat. Bevor ich da aber bei QC ein Ticket aufmache, fände ich es klasse, wenn ich wüsste, ob es tatsächlich nicht an meinem Rechner liegt. Insofern könntet ihr mir einen großen Gefallen tun, wenn ihr einen Windows-Rechner mit Touchscreen habt und mal kurz die Anwendung testen könntet und schaut, ob ihr immer passende X-Werte angezeigt bekommt oder eben auch "eins hinterher". Ihr könnt dazu entwder das Delphi-Projekt nutzen oder die fertige Exe, wenn ihr da keine Sorgen habt. :-)

Danke fürs kurze Testen!

Der schöne Günther 24. Sep 2019 10:57

AW: VCL OnGesture/GestureManager: immer "eins hinterher"?
 
Ich wollte es gestern abend probieren, habe es aber nicht geschafft. Ich versuche es heute nochmal, auf zwei Geräten. Geduld 😓

Der schöne Günther 25. Sep 2019 14:01

AW: VCL OnGesture/GestureManager: immer "eins hinterher"?
 
ich habe gerade einmal die .exe ausprobiert, weiß aber nicht was ich eigentlich erwarten soll - Da ist ein Label1 und egal ob ich links, oben, unten oder in der Mitte wische -(egal in welche Richtung) scheint in das Label1 eine Zufallszahl geschrieben zu werden. Manchmal 140, manchmal 2200, meist aber nur kleine Änderungen. Was übersehe ich?

Bbommel 25. Sep 2019 14:12

AW: VCL OnGesture/GestureManager: immer "eins hinterher"?
 
Im Label sollte nach einem Wischen nach oben oder unten eigentlich die x-Position stehen, an der du das ausgeführt hast. Das heißt, wenn du am linken Rand des Fensters wuschst, dann sollte da eher so etwas unter 100 stehen, wenn du am rechten Rand wischst (je nachdem wie groß du das Fenster gemacht hast), dann eher ein großer dreistelliger bis vierstelliger Wert.

Wenn dir die Ergebnisse eher zufällig vorkommen, dann spricht das schon eher für den von mir vermuteten Fehler.

Danke fürs Testen! :-)

Der schöne Günther 25. Sep 2019 15:01

AW: VCL OnGesture/GestureManager: immer "eins hinterher"?
 
Oh, dass das X-Koordinaten sind war mir nicht klar. Das würde wohl hinkommen. Ich konnte auch nicht feststellen dass er "eins hinterher" wäre. Diese VCL-Komponenten triggern ihr Event erst wenn man den Finger von Glas nimmt / Maustaste loslässt / Stift anhebt.


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