![]() |
Windows 10 touch screen tablet scrolling und VCL
Hallo,
Ein Benutzer meiner Software meinte es gibt ein Problem mit dem Scrollen das seit dem Upgrade auf DXE3 (von Delphi 7) besteht. Hoch und runterstreifen/swipen auf meinem Custom-Control (TXmHexEdit) hat früher gescrollt, jetzt wird ausgewählt. Also werden wohl irgendwie die MouseDown/MouseMove und Touch-Ereignisse anders behandelt seit DXE3. Wahrscheinlich liegt es am "neuen" Touchsupport. Nun habe ich kein Win 10 touch screen tablet um das zu testen und zu debuggen. Mit normaler Maus oder touch pad kann ich das Problem nicht reproduzieren. Hat jemand ähnliche Probleme gehabt oder Tipps? |
AW: Windows 10 touch screen tablet scrolling und VCL
XE3 ist aber auch schon "sehr alt".
Und ist dein "TXmHexEdit" auch auf neueren Delphi-Versionen angepasst worden? Kannst du nicht mal testhalber mit D10.2 Community-Edition eine Compilierung durchführen um zu sehen ob es evtl. an dieser alten Version liegt? |
AW: Windows 10 touch screen tablet scrolling und VCL
Zitat:
Der Aufwand alles zu installieren und dann zu kompilieren usw. wäre allerdings trotzdem recht hoch. Daher wollte ich eher mal in die Runde fragen ob diesbezüglich was bekannt ist, bzw. überhaupt jemand so ein Gerät hat, zum testen... |
AW: Windows 10 touch screen tablet scrolling und VCL
Ich kann gerne etwas testen (normales Surface).
|
AW: Windows 10 touch screen tablet scrolling und VCL
Danke, PN geschickt.
|
AW: Windows 10 touch screen tablet scrolling und VCL
So, ich habe nach ausgiebigem Testen und Lesen der VCL und WinAPI den Fehler gefunden. Es ist tatsächlich ein Problem in der VCL der auftritt weil sich eine Win-API (SetGestureConfig()) unerwartet verhält.
Das Problem wird bei allen TCustomControls auftreten die nicht speziell eine Touchbehandlung eingebaut haben (dürfte die große Mehrheit sein). Die VCL deaktiviert unglücklicherweise den eingebauten Fallback von Windows, der normalerweise aktiv ist, wenn ein Steuerelement keine besondere Touch-Behandlung umsetzt. Die neuste Delphi Version (Community Edition) hat den gleichen Fehler noch immer, der VCL-Quelltext ist auch unverändert (was die Touch-Logik angeht). Ich habe auch einen weiteren Fehler entdeckt, wenn man die TapAndHold-Gesture ausführt wird richtig ein Rechtsklick ausgeführt, aber das markierende Rechteck verschwindet nicht automatisch wie bei anderen Programmen, wie z.B. Notepad. Manchmal bleibt auch eine Reihe von Rechtecken auf dem Schirm, bis es sehr störend wird. |
AW: Windows 10 touch screen tablet scrolling und VCL
Zitat:
Zitat:
|
AW: Windows 10 touch screen tablet scrolling und VCL
Mit Touch könnte Dir vielleicht folgendes Helfen:
Delphi-Quellcode:
Oder beim Surface mit Stift:
xxx.MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); begin if (ssTouch in Shift) then begin // hier wischt jemand mit dem Finger ... end
Delphi-Quellcode:
(ssPen in Shift)
|
AW: Windows 10 touch screen tablet scrolling und VCL
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:
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.
Touch.InteractiveGestures := [igPan, igPressAndTap];
Touch.InteractiveGestureOptions := [igoPanInertia, igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanGutter, igoParentPassthrough]; 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): ![]() Das erreicht man durch eine weitere Option:
Delphi-Quellcode:
Touch.TabletOptions := Touch.TabletOptions - [toFlicks];
In der VCL kann man diese Features aktivieren, in der WINAPI deaktiviert man sie.
Delphi-Quellcode:
entspricht also
toFlicks
Delphi-Quellcode:
: 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.
not TABLET_DISABLE_FLICKS
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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