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 が返されるようです。
ピンチ操作の角度を知る方法はないでしょうか。
WM_GESTURE message | Microsoft Docs
https://docs.microsoft.com/en-us/windows/desktop/wintouch/wm-gesture
を見ると角度がわかるのはGID_ROTATEのときだけのような気がしますね…
GID_ZOOMでは2点間の距離だけしか送られてきてなくないですか?
ご指摘の通りで,ZOOMでは2点の中点の座標と距離しか返ってきません。
マルチタッチの複数の座標を得ることができればなんとかできるかもしれないと思っているのですが・・・
全く不勉強で助けになるかどうかわからないのですが、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
onGesture を使うのをあきらめて,onTouch イベントのみで,プログラムを書き直しました。
ただ,WM_TOUCH メッセージはフォームにしか送られず,また,パネルなどのTwincontroll があると,その表面をなぞっても無反応でした。
手こずりましたが何とか動作しています。
ありがとうございました。