Da ich kein Touchdisplay-Gerät habe, habe ich mit einem Simulator getestet. Wer Visual Studio installiert hat (Community Edition reicht), findet ihn unter C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Simulator\15.0\Microsoft.Windows.Simulator.exe
Die Versionsnummer im Pfad muss man natürlich entsprechend der installierten VS Version anpassen.
Er öffnet eine RDP-Session und am rechten Rand des "Simulator"-Fensters kann man auswählen ob die Maus als normaler Zeiger oder als Touch-Gerät funktioniert (gibt verschiedene Optionen für Ein-Finger-Touch, Pinch-And-Zoom, Rotate usw.).
Mit dem konnte ich den Fehler reproduzieren und ihn zumindest im Simulator beheben.
Hat man ein normales TCustomControl das schon Scrolling unterstützt, reicht es im Konstruktor folgenden Code einzufügen:
Delphi-Quellcode:
Touch.InteractiveGestures := [igPan, igPressAndTap];
Touch.InteractiveGestureOptions := [igoPanInertia, igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanGutter, igoParentPassthrough];
Danach verhält sich das Steuerelement (zumindest im Simulator) wieder so wie ein Steuerelement das richtig auf Pan-Gesten reagiert, wie wenn Windows die Unterstützung hinzufügt für Programme die eigentlich kein Touch, dafür aber Scrolling, unterstützen. Bevor Delphi Touch-Unterstützung bekommen hat, waren diese Zeilen nicht notwendig, und es hat automatisch funktioniert, wie in den Posts weiter oben erwähnt.
Es schadet auch nicht IsTouchPropertyStored() zu überschreiben, damit man die Optionen InteractiveGestures und InteractiveGestureOptions nur in die
DFM schreibt, wenn sie andere Werte haben als die die im Konstruktor gesetzt wurden.
MS empfhielt noch Pen-Flicks zu deaktivieren (ohne Erklärung, aber ich denke damit es nicht mit dem Scrolling interferiert):
https://docs.microsoft.com/en-us/win...disable-flicks
Das erreicht man durch eine weitere Option:
Touch.TabletOptions := Touch.TabletOptions - [toFlicks];
In der
VCL kann man diese Features aktivieren, in der
WINAPI deaktiviert man sie.
toFlicks
entspricht also
not TABLET_DISABLE_FLICKS
: Die
VCL setzt alle TABLET_DISABLE_* Konstanten standardmäßig, und entfernt eine TABLET_DISABLE_ Konstante nur wenn die entsprechende Option (wie toFlicks) nicht in TabletOptions ist.
Will man also Pen-Flicks deaktivieren, muss man gar nichts machen. Die
VCL macht das standardmäßig und deaktiviert alle TabletOptionen, bis auf toPressAndHold.
Es schadet aber nicht das explizit zu machen und wie oben toFlicks von den aktivierten Tablet-Features zu entfernen.