Mouse vs Touch message Delphi OpenGL alól
2018-07-01T16:16:12+02:00
2018-07-03T19:46:23+02:00
2022-08-11T04:42:04+02:00
PizzaProgram
Egy egyedi, Delphi XE alatt írt 3D megjelenítő motort (DLL-t) használunk Delphi7 alól asztaltérkép megjelenítéséhez.
Az utóbbi időben megjelenő Windows10 érintőképernyőkön azonban nem érzékeli a "kattintást".
(Az OpenGL területen KÍVÜL mindent érzékel.)
A számomra érthetetlen jelenség az, hogy ilyenkor, ha rádugunk a Laptopra / Tabletre egy egeret, vagy VNC-vel távolról vezéreljük, akkor minden szépen működik.

Ezen példaprogram... alapján megpróbáltuk implementálni a WM_TOUCH message / gesture-öket is, de egyikre sem reagál.
Mutasd a teljes hozzászólást!
MSDN szerint a WM_TOUCH legacy. Lehet célszerűbb lenne a WM_POINTER-t használni.

forrás:
User Interaction
Legacy User Interaction Features/Touch Input

Mindenhol azt látom, hogy azt írják, hogy ha jó a Win8 min target, akkor kerülni kell a WM_TOUCH-ot, mert csak a szívás van vele:
WM_TOUCH vs WM_POINTER
WM_TOUCH is totally bananas. – The Witness
Ezt érdemes lehet még átfutni:
Troubleshooting Applications
RegisterTouchWindow visszatérési értékét nézném meg, vagy a 'Desktop Experience' engedélyezve van-e..

Szerintem az lesz a megoldás, ha kerülitek a WM_TOUCH-ot, ha megtehetitek..
Mutasd a teljes hozzászólást!

  • Az override-olt WndProc() eljárásba csak a WM_GESTURENOTIFY üzenetek érkeznek meg,
    a lényeg, azaz a: WM_GESTURE és WM_TOUCH sajnos már nem.
    Létezik, hogy a videokártya drájvere elnyel OpenGL felületen keletkező message-eket?
    Mutasd a teljes hozzászólást!
  • A WndProc(Message: TMessage) függvényen átfutó üzeneteket elkapva egy szimpla érintés sorban az alábbiakat produkálja (.. decimális számokban) :
    132, 587, 33, 585, 582, 716, 282, (581,) 49294, 581 ... 581, 583, 586

    Egyenként kinyomozva az alábbiakat sikerült beazonosítani:

    33 - WM_MOUSEACTIVATE 132 - WM_NCHITTEST 282 - WM_GESTURENOTIFY 581 - WM_POINTERUPDATE 0x0245 582 - WM_POINTERDOWN 0x0246 583 - WM_POINTERUP 0x0247 585 - WM_POINTERENTER 0x0249 586 - WM_POINTERLEAVE 0x024A 587 - WM_POINTERACTIVATE 0x024B 716 - ismeretlen, WM_GUESTURE kapcsolatos valami 49294 - ismeretlen, semmilyen dokumentációban nem szerepel !
    Tehát megállapítható, hogy Sem WM_TOUCH sem WM_xxMOUSE, WM_GESTURE message-ek nem érkeznek meg,
    hanem helyette valamiért POINTER-ré.

    Mi okozhatja mindezt?
    Mutasd a teljes hozzászólást!
  • 49294 - ismeretlen, semmilyen dokumentációban nem szerepel !

    A Cxxx-range saját, alkalmazásspecifikus üzenet: WM\_USER  - szóval elvileg szövegesek, megpróbálhatsz beléjük nézni.
    Mutasd a teljes hozzászólást!
  • MSDN szerint a WM_TOUCH legacy. Lehet célszerűbb lenne a WM_POINTER-t használni.

    forrás:
    User Interaction
    Legacy User Interaction Features/Touch Input

    Mindenhol azt látom, hogy azt írják, hogy ha jó a Win8 min target, akkor kerülni kell a WM_TOUCH-ot, mert csak a szívás van vele:
    WM_TOUCH vs WM_POINTER
    WM_TOUCH is totally bananas. – The Witness
    Ezt érdemes lehet még átfutni:
    Troubleshooting Applications
    RegisterTouchWindow visszatérési értékét nézném meg, vagy a 'Desktop Experience' engedélyezve van-e..

    Szerintem az lesz a megoldás, ha kerülitek a WM_TOUCH-ot, ha megtehetitek..
    Mutasd a teljes hozzászólást!
  • Nagyon szépen köszönöm a linkeket, egész nap azokat olvastam.

    Bár nagyon szerettem volna egyszerűen lekezelni az összes wm_gesture-t, amik a példaprogramban működnek is szépen (forgatás, zoom, stb...)
    De ha nincs más megoldás, marad a WM_POINTER...
    Szerencsére csak 15 percet öltem bele feleslegesen a WinApi > Delphi átirat elkészítésébe, amikor eszembe jutott, mi van, ha valaki esetleg már elkészítette?
    Egyetlen találatot dobott a kereső, és az szinte tökéletes:

    https://github.com/ahausladen/ObjectPascal-WinAPIs/blob/master/WinAp..

    ("Szinte" alatt azt értem, hogy Delphi7 alá nem fordítható.)
    Mutasd a teljes hozzászólást!
abcd