AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Windows 10 touch screen tablet scrolling und VCL
Thema durchsuchen
Ansicht
Themen-Optionen

Windows 10 touch screen tablet scrolling und VCL

Ein Thema von mael · begonnen am 1. Okt 2018 · letzter Beitrag vom 8. Okt 2018
Antwort Antwort
Benutzerbild von mael
mael

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

Windows 10 touch screen tablet scrolling und VCL

  Alt 1. Okt 2018, 17:55
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?
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Windows 10 touch screen tablet scrolling und VCL

  Alt 1. Okt 2018, 18:33
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von mael
mael

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

AW: Windows 10 touch screen tablet scrolling und VCL

  Alt 1. Okt 2018, 20:13
XE3 ist aber auch schon "sehr alt".
Nicht wirklich. Ende 2013 gekauft finde ich ziemlich neu, besonders wenn man die Changelogs betrachtet hat sich in der VCL wenig verändert (FMX/Mobile eher, aber das war/ist extra).
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...
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd

Geändert von mael ( 1. Okt 2018 um 20:25 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Windows 10 touch screen tablet scrolling und VCL

  Alt 2. Okt 2018, 17:37
Ich kann gerne etwas testen (normales Surface).
  Mit Zitat antworten Zitat
Benutzerbild von mael
mael

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

AW: Windows 10 touch screen tablet scrolling und VCL

  Alt 3. Okt 2018, 17:02
Danke, PN geschickt.
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd
  Mit Zitat antworten Zitat
Benutzerbild von mael
mael

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

AW: Windows 10 touch screen tablet scrolling und VCL

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

Geändert von mael ( 8. Okt 2018 um 08:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Windows 10 touch screen tablet scrolling und VCL

  Alt 8. Okt 2018, 08:42
So ich habe nach ausgiebigen Testen und Lesen der VCL und WinAPI den Fehler gefunden. Es ist tatäschlich ein Problem in der VCL das auftritt weil sich eine Win-API unerwartet verhält.
Touch-Befehle und Mausbefehle mischen sich leider nach nicht unbedingt vorhersehbaren Regeln, insbesondere z.B. bei Labels auf anderen Controls usw., ja, das mussten wir auch schon feststellen.

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.
Das konnten wir auch noch nicht lösen. Das passiert aber auch nicht nur bei VCL-Programmen, sondern bisweilen auch schlicht auf einem frisch gestarteten Windows 10 direkt auf dem Desktop... mit den Standard-Grafiktreibern passiert das hier nicht, aber dafür funktionieren nicht alle Auflösungen usw.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Windows 10 touch screen tablet scrolling und VCL

  Alt 8. Okt 2018, 09:45
Mit Touch könnte Dir vielleicht folgendes Helfen:

Delphi-Quellcode:
xxx.MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
 if (ssTouch in Shift) then begin
   // hier wischt jemand mit dem Finger ...
 end
Oder beim Surface mit Stift:

  (ssPen in Shift)

Geändert von arnof ( 8. Okt 2018 um 09:47 Uhr)
  Mit Zitat antworten Zitat
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, 20: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 21:25 Uhr) Grund: Link korrigiert
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 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