ピンチ操作の角度を取得したい

解決


Jasmine  2018-10-15 03:18:38  No: 49566

win10 + Delphi10.2 + VCL 環境です。

ピンチ操作で,拡大や縮小を行っていますが,一方向にだけ伸縮したい時があり(縦方向にピンチしたときは上下方向にだけ伸縮させるなど),ピンチ操作の角度(方向)を知りたいのです。

現在は,onGesture イベントで,GestureEventInfo を参照しています。

  TGestureEventInfo = record
    GestureID: TGestureID;
    Location: TPoint;
    Flags: TInteractiveGestureFlags;
    Angle: Double;
    InertiaVector: TSmallPoint;
    case Integer of
      0: (Distance: Integer);
      1: (TapLocation: TSmallPoint);
  end;

この中には,角度を示す項目 Angle がありますが,ピンチ操作の際には 0 が返されるようです。
ピンチ操作の角度を知る方法はないでしょうか。


通りすがり  2018-10-17 00:17:01  No: 49567

WM_GESTURE message | Microsoft Docs
https://docs.microsoft.com/en-us/windows/desktop/wintouch/wm-gesture

を見ると角度がわかるのはGID_ROTATEのときだけのような気がしますね…
GID_ZOOMでは2点間の距離だけしか送られてきてなくないですか?


Jasmine  2018-10-17 02:45:50  No: 49568

ご指摘の通りで,ZOOMでは2点の中点の座標と距離しか返ってきません。
マルチタッチの複数の座標を得ることができればなんとかできるかもしれないと思っているのですが・・・


通りすがり  2018-10-17 06:17:57  No: 49569

全く不勉強で助けになるかどうかわからないのですが、GetTouchInputInfo関数で取れたりしませんかね?

GetTouchInputInfo function | Microsoft Docs
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-gettouchinputinfo

GetTouchInputInfo 関数 (Windows)
https://msdn.microsoft.com/ja-jp/library/windows/desktop/dd371582(v=vs.85).aspx


Jasmine  2018-10-24 08:31:49  No: 49570

onGesture を使うのをあきらめて,onTouch イベントのみで,プログラムを書き直しました。

ただ,WM_TOUCH メッセージはフォームにしか送られず,また,パネルなどのTwincontroll があると,その表面をなぞっても無反応でした。

手こずりましたが何とか動作しています。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加