Delphi-XE5-手势操作-Gestures-使用方法

Delphi-XE5-手势操作-Gestures-使用方法

一、首先转载一下别人的方法介绍:

今天尝试了TTabControl的使用。在很多Android的app中,首次启动时都使用选项卡模式进行产品介绍,用户通过向左滑动,改变选项卡。在xe5下这项工作由TTabControl控件完成,如下图:

image

 

1、TTabControl外观

TTabControl的外观由属性TabPosition控制,可选项包括:

tpTop        选项tab在控件上方

tpBottom   选项tab在控件下方

tpNone     以原点形式显示选项tab,在控件下方,如下图:

image

tpDots       以方格形式显示选项tab,在控件下方,如下图:

image

 

2、控制换页

对换页的处理有以下几种形式:

(1)按钮+Action控制

通过创建标准Action——TChangeTabAction,指定Tab属性表示该动作的目标选项卡,如下图:

image

然后对按钮指定对应的Action

(2)手势(Gesture)控制

手势控制就是在Pad或手机上常用的左右滑动,放大缩小等操作,这里需要先在Form上放置一个TGestureManager控件,然后在TTabControl的OnGesture事件对手势进行判断和处理,代码如下:

procedureTTabbedwithNavigationForm.TabControl1Gesture(Sender:TObject; 
  const EventInfo: TGestureEventInfo; var Handled:Boolean); 
begin

 //识别事件的手势 
  case EventInfo.GestureIDof 
   sgiLeft://由右向左滑动手指 
   begin

      //如果不是最后一个tab,则选择下一个tab 
     if TabControl1.ActiveTab <>TabControl1.Tabs[TabControl1.TabCount-1]then 
       TabControl1.ActiveTab :=TabControl1.Tabs[TabControl1.TabIndex+1]; 
     Handled := True; //已代码处理 
   end;

   sgiRight://由左向右滑动手指 
   begin

     //如果不是第一个tab,则选取前一个tab 
     if TabControl1.ActiveTab <>TabControl1.Tabs[0] then 
       TabControl1.ActiveTab :=TabControl1.Tabs[TabControl1.TabIndex-1]; 
     Handled := True;//已代码处理 
   end; 
  end; 
end; 

 

(3)通过硬件按钮(Hardware KeyBoard)控制

在窗体的OnKeyDown或OnKeyUp事件,对硬件按钮进行识别,然后处理。代码如下:

procedureTTabbedwithNavigationForm.FormKeyUp(Sender: TObject; var Key:Word; 
  var KeyChar: Char; Shift:TShiftState); 
begin

 //如果是硬件的返回按钮 
  if Key = vkHardwareBackthen 
  begin

   //在特定的页面上,返回上一个页面 
    if(TabControl1.ActiveTab = TabItem1) and (TabControl2.ActiveTab =TabItem6) then 
   begin

     //指定页面 
     TabControl2.ActiveTab = TabItem5;

     //已处理键盘的键值 
     Key := 0; 
   end; 
  end; 
end;

二、总结一下自己的经验:

1.在窗体上使用并放置一个TGestures控件是必需的
2.如果要操作控件,并使按件能支持手势操作,还要进行一些相应的设置才能使用
3. [转载]Delphi-XE5-手势操作-Gestures-使用方法 [转载]Delphi-XE5-手势操作-Gestures-使用方法 [转载]Delphi-XE5-手势操作-Gestures-使用方法 [转载]Delphi-XE5-手势操作-Gestures-使用方法
本经人试验(由于这玩意开发太慢,没办法一个个试出来,要好久的),主窗体的Touch下的GestureManager属性要指定TGestures控件,然后在Gestures下的Standard属性下要选中相应的动作,比如:
Left:从右到左划动
Right:从左到右划动
Up:从下到上划动
Down:从上到下划动
UpLeft:从下到上左
UpRight:从下到上右
剩下的你自己可以理解了..........
这里建议你只选你要的动作,不要什么动作都支持,那样的结果只会导致你的程序变的巨慢
这里还有一个属性集:
[转载]Delphi-XE5-手势操作-Gestures-使用方法
InterActiveGestures:交互手势
igZoom:选择为True后可以支持放大缩小功能
igPan:百度翻译为锅 [转载]Delphi-XE5-手势操作-Gestures-使用方法应该是支持画圆等操作(这个等我证实后再更正)
igRotate:旋转
igTwoFingerTap:支持两个手指同时操作
igPressAndTap: 新闻 水龙头(百度翻译)实际应该理解为手指划折线的支持(有待证实)
igLongTap: 长的 水龙头(百度翻译)实际理解为手指画长折线的支持(有待证实)
igDoubleTap:双击操作(字面理解,也没实践)

4.不支持动作的解决
可在窗体上放置一个标签用来显示动作值,即在窗体的onGesture事件中捕获EventInfo.GestureID的常量,通常从右往左手势的值为1,从左至右的手势值为2,如果能正确显示相应数值,基本上手势是在这个应用上被支持了,但至于你的手势是否被响应了,这要看你的代码了。

5.手势参考
Delphi把可以识别的手势分成了 3 类: 标准手势、自定义手势、交互手势(InteractiveGestures).

其中的交互手势用鼠标不好模拟, 可能只能用于触摸屏;

Delphi 预定义了 34 种标准手势, 并定义成 TStandardGesture 枚举类型:
TStandardGesture = (
  sgLeft            = sgiLeft,
  sgRight           = sgiRight,
  sgUp              = sgiUp,
  sgDown            = sgiDown,
  sgUpLeft          = sgiUpLeft,
  sgUpRight         = sgiUpRight,
  sgDownLeft        = sgiDownLeft,
  sgDownRight       = sgiDownRight,
  sgLeftUp          = sgiLeftUp,
  sgLeftDown        = sgiLeftDown,
  sgRightUp         = sgiRightUp,
  sgRightDown       = sgiRightDown,
  sgUpDown          = sgiUpDown,
  sgDownUp          = sgiDownUp,
  sgLeftRight       = sgiLeftRight,
  sgRightLeft       = sgiRightLeft,
  sgUpLeftLong      = sgiUpLeftLong,
  sgUpRightLong     = sgiUpRightLong,
  sgDownLeftLong    = sgiDownLeftLong,
  sgDownRightLong   = sgiDownRightLong,
  sgScratchout      = sgiScratchout,
  sgTriangle        = sgiTriangle,
  sgSquare          = sgiSquare,
  sgCheck           = sgiCheck,
  sgCurlicue        = sgiCurlicue,
  sgDoubleCurlicue  = sgiDoubleCurlicue,
  sgCircle          = sgiCircle,
  sgDoubleCircle    = sgiDoubleCircle,
  sgSemiCircleLeft  = sgiSemiCircleLeft,
  sgSemiCircleRight = sgiSemiCircleRight,
  sgChevronUp       = sgiChevronUp,
  sgChevronDown     = sgiChevronDown,
  sgChevronLeft     = sgiChevronLeft,
  sgChevronRight    = sgiChevronRight);

Enum Symbol
sgLeft image:64GestLeft.gif
sgRight image:64GestRight.gif
sgUp image:64GestUp.gif
sgDown image:64GestDown.gif
sgUpLeft image:64GestUpLeft.gif
sgUpRight image:64GestUpRight.gif
sgDownLeft image:64GestDownLeft.gif
sgDownRight image:64GestDownRight.gif
sgLeftUp image:64GestLeftUp.gif
sgLeftDown image:64GestLeftDown.gif
sgRightUp image:64GestRightUp.gif
sgRightDown image:64GestRightDown.gif
sgUpDown image:64GestUpDown.gif
sgDownUp image:64GestDownUp.gif
sgLeftRight image:64GestLeftRight.gif
sgRightLeft image:64GestRightLeft.gif
sgUpLeftLong image:64GestUpLeftLong.gif
sgUpRightLong image:64GestUpRightLong.gif
sgDownLeftLong image:64GestDownLeftLong.gif
sgDownRightLong image:64GestDownRightLong.gif
sgScratchout image:64GestScratchOut.gif
sgTriangle image:64GestTriangle.gif
sgSquare image:64GestSquare.gif
sgCheck image:64GestCheck.gif
sgCurlicue image:64GestCurlicue.gif
sgDoubleCurlicue image:64GestDoubleCurlicue.gif
sgCircle image:64GestCircle.gif
sgDoubleCircle image:64GestDoubleCircle.gif
sgSemiCircleLeft image:64GestSemiCircleLeft.gif
sgSemiCircleRight image:64GestSemiCircleRight.gif
sgChevronUp image:64GestChevronUp.gif
sgChevronDown image:64GestChevronDown.gif
sgChevronLeft image:64GestChevronLeft.gif
sgChevronRight image:64GestChevronRight.gif
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值