【问题标题】:How do you access trackpad gestures in Delphi-Berlin?如何在 Delphi-Berlin 中访问触控板手势?
【发布时间】:2016-07-21 07:47:36
【问题描述】:

我有 2 台内置多点触控触控板的笔记本电脑,一台是 Acer Switch,另一台是 ASUS Zenbook,我一直在尝试让我的 Delphi 应用程序识别手势。

我曾认为触控板手势会映射到触摸屏手势,但这似乎并非如此,因为在触控板上捏合缩放或平移不会触发 ongesture 事件。

触控板手势可在 Firefox 等其他应用程序上使用,因此必须可以捕获它们。

似乎两个手指垂直滚动被映射到 Delphi mousewheelup 和 mousewheel down 事件。我似乎无法弄清楚如何捕获其他类型的事件。

关于如何做到这一点的任何线索?

更新 - 我找到了有关触控板手势的 MS 文档,看来它们已转换为鼠标滚轮事件。

https://msdn.microsoft.com/en-us/library/windows/hardware/dn614021(v=vs.85).aspx

Delphi 鼠标在捕获这些消息时似乎存在一个错误,因为它没有捕获水平鼠标滚轮消息。

触控板垂直平移也会产生与鼠标滚轮滚动相反的滚动方向。

【问题讨论】:

    标签: delphi windows-10 gestures delphi-10.1-berlin


    【解决方案1】:

    由于没有人回答这个问题,我猜这是一个尚未解决的新问题,所以我进行了挖掘并提出了一个解决方案,其代码如下。

    此代码处理平移和缩放的所有常见鼠标和触控板手势。所有这些手势都通过鼠标滚轮事件进行路由。额外覆盖的 WndProc 捕获 Delphi 事件管理器中缺少的水平事件。

    procedure TmyFrame.WndProc(var Message:TMessage);
    begin
      if Message.Msg=WM_MOUSEHWHEEL then
      begin
        if TWMMouseWheel(Message).Keys=0 then
        begin     //Scrollbars are assumed to have 1000 positions
          with HorzScrollBar do
            Position := Position+TWMMouseWheel(Message).WheelDelta div 10;
          Message.Result := 0;
        end else
          Message.Result := 1;
      end else
        inherited;
    end;
    
    procedure TmyFrame.FrameMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    var n:integer;
    begin
      Accum:=Accum+wheeldelta;   //We need an accumulator as trackpad deltas are little and often
      n:=Accum div 30;
      if n=0 then exit;
      Accum:=0;
      if ssctrl in shift then   //pinch zoom
      begin
        Zoomfunc(1-sign(WheelDelta)/50);  // 2% granularity ie 0.98 is -2% shrink
      end else
      if ssshift in shift then
      with HorzScrollBar do   //horiz using shift-mouswheel
        position:=position+n
      else
      with VertScrollBar do   //vert scroll
      begin
        position:=position-n;
      end;
      handled:=true;
    end;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多