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

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

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

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

 

1、TTabControl外观

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

tpTop        选项tab在控件上方

tpBottom   选项tab在控件下方

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

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

 

2、控制换页

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

(1)按钮+Action控制

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

然后对按钮指定对应的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-使用方法_第1张图片
本经人试验(由于这玩意开发太慢,没办法一个个试出来,要好久的),主窗体的Touch下的GestureManager属性要指定TGestures控件,然后在Gestures下的Standard属性下要选中相应的动作,比如:
Left:从右到左划动
Right:从左到右划动
Up:从下到上划动
Down:从上到下划动
UpLeft:从下到上左
UpRight:从下到上右
剩下的你自己可以理解了..........
这里建议你只选你要的动作,不要什么动作都支持,那样的结果只会导致你的程序变的巨慢
这里还有一个属性集:
Delphi-XE5-手势操作-Gestures-使用方法_第2张图片
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
sgRight
sgUp
sgDown
sgUpLeft
sgUpRight
sgDownLeft
sgDownRight
sgLeftUp
sgLeftDown
sgRightUp
sgRightDown
sgUpDown
sgDownUp
sgLeftRight
sgRightLeft
sgUpLeftLong
sgUpRightLong
sgDownLeftLong
sgDownRightLong
sgScratchout
sgTriangle
sgSquare
sgCheck
sgCurlicue
sgDoubleCurlicue
sgCircle
sgDoubleCircle
sgSemiCircleLeft
sgSemiCircleRight
sgChevronUp
sgChevronDown
sgChevronLeft
sgChevronRight

你可能感兴趣的:(编程技术)