Einzelnen Beitrag anzeigen

Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#9

AW: Windows 10 touch screen tablet scrolling und VCL

  Alt 8. Okt 2018, 19:49
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.
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd

Geändert von mael ( 8. Okt 2018 um 20:25 Uhr) Grund: Link korrigiert
  Mit Zitat antworten Zitat