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.如果要操作控件,并使按件能支持手势操作,还要进行一些相应的设置才能使用
本经人试验(由于这玩意开发太慢,没办法一个个试出来,要好久的),主窗体的Touch下的GestureManager属性要指定TGestures控件,然后在Gestures下的Standard属性下要选中相应的动作,比如:
Left:从右到左划动
Right:从左到右划动
Up:从下到上划动
Down:从上到下划动
UpLeft:从下到上左
UpRight:从下到上右
剩下的你自己可以理解了..........
这里建议你只选你要的动作,不要什么动作都支持,那样的结果只会导致你的程序变的巨慢
这里还有一个属性集:
InterActiveGestures:交互手势
igZoom:选择为True后可以支持放大缩小功能
igPan:百度翻译为锅
![[转载]Delphi-XE5-手势操作-Gestures-使用方法 [转载]Delphi-XE5-手势操作-Gestures-使用方法](https://i-blog.csdnimg.cn/blog_migrate/38057bdcddc6f7cd5a12dfc2e8e15e58.gif)
应该是支持画圆等操作(这个等我证实后再更正)
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 | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestLeft.gif](http://docwiki.embarcadero.com/images/RADStudio/e/e/ea/64GestLeft.gif) |
sgRight | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestRight.gif](http://docwiki.embarcadero.com/images/RADStudio/e/5/5c/64GestRight.gif) |
sgUp | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestUp.gif](http://docwiki.embarcadero.com/images/RADStudio/e/d/d4/64GestUp.gif) |
sgDown | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDown.gif](http://docwiki.embarcadero.com/images/RADStudio/e/f/f4/64GestDown.gif) |
sgUpLeft | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestUpLeft.gif](http://docwiki.embarcadero.com/images/RADStudio/e/9/96/64GestUpLeft.gif) |
sgUpRight | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestUpRight.gif](http://docwiki.embarcadero.com/images/RADStudio/e/3/3b/64GestUpRight.gif) |
sgDownLeft | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDownLeft.gif](http://docwiki.embarcadero.com/images/RADStudio/e/8/83/64GestDownLeft.gif) |
sgDownRight | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDownRight.gif](http://docwiki.embarcadero.com/images/RADStudio/e/1/1f/64GestDownRight.gif) |
sgLeftUp | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestLeftUp.gif](http://docwiki.embarcadero.com/images/RADStudio/e/1/19/64GestLeftUp.gif) |
sgLeftDown | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestLeftDown.gif](http://docwiki.embarcadero.com/images/RADStudio/e/9/98/64GestLeftDown.gif) |
sgRightUp | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestRightUp.gif](http://docwiki.embarcadero.com/images/RADStudio/e/f/ff/64GestRightUp.gif) |
sgRightDown | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestRightDown.gif](http://docwiki.embarcadero.com/images/RADStudio/e/7/7d/64GestRightDown.gif) |
sgUpDown | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestUpDown.gif](http://docwiki.embarcadero.com/images/RADStudio/e/6/6b/64GestUpDown.gif) |
sgDownUp | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDownUp.gif](http://docwiki.embarcadero.com/images/RADStudio/e/c/c7/64GestDownUp.gif) |
sgLeftRight | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestLeftRight.gif](http://docwiki.embarcadero.com/images/RADStudio/e/5/5f/64GestLeftRight.gif) |
sgRightLeft | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestRightLeft.gif](http://docwiki.embarcadero.com/images/RADStudio/e/d/da/64GestRightLeft.gif) |
sgUpLeftLong | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestUpLeftLong.gif](http://docwiki.embarcadero.com/images/RADStudio/e/e/ec/64GestUpLeftLong.gif) |
sgUpRightLong | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestUpRightLong.gif](http://docwiki.embarcadero.com/images/RADStudio/e/7/7f/64GestUpRightLong.gif) |
sgDownLeftLong | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDownLeftLong.gif](http://docwiki.embarcadero.com/images/RADStudio/e/8/8a/64GestDownLeftLong.gif) |
sgDownRightLong | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDownRightLong.gif](http://docwiki.embarcadero.com/images/RADStudio/e/8/88/64GestDownRightLong.gif) |
sgScratchout | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestScratchOut.gif](http://docwiki.embarcadero.com/images/RADStudio/e/9/99/64GestScratchOut.gif) |
sgTriangle | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestTriangle.gif](http://docwiki.embarcadero.com/images/RADStudio/e/2/23/64GestTriangle.gif) |
sgSquare | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestSquare.gif](http://docwiki.embarcadero.com/images/RADStudio/e/c/cd/64GestSquare.gif) |
sgCheck | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestCheck.gif](http://docwiki.embarcadero.com/images/RADStudio/e/f/f6/64GestCheck.gif) |
sgCurlicue | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestCurlicue.gif](http://docwiki.embarcadero.com/images/RADStudio/e/a/ac/64GestCurlicue.gif) |
sgDoubleCurlicue | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDoubleCurlicue.gif](http://docwiki.embarcadero.com/images/RADStudio/e/f/f1/64GestDoubleCurlicue.gif) |
sgCircle | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestCircle.gif](http://docwiki.embarcadero.com/images/RADStudio/e/9/93/64GestCircle.gif) |
sgDoubleCircle | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestDoubleCircle.gif](http://docwiki.embarcadero.com/images/RADStudio/e/7/70/64GestDoubleCircle.gif) |
sgSemiCircleLeft | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestSemiCircleLeft.gif](http://docwiki.embarcadero.com/images/RADStudio/e/e/e6/64GestSemiCircleLeft.gif) |
sgSemiCircleRight | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestSemiCircleRight.gif](http://docwiki.embarcadero.com/images/RADStudio/e/f/f2/64GestSemiCircleRight.gif) |
sgChevronUp | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestChevronUp.gif](http://docwiki.embarcadero.com/images/RADStudio/e/4/44/64GestChevronUp.gif) |
sgChevronDown | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestChevronDown.gif](http://docwiki.embarcadero.com/images/RADStudio/e/f/f3/64GestChevronDown.gif) |
sgChevronLeft | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestChevronLeft.gif](http://docwiki.embarcadero.com/images/RADStudio/e/d/d1/64GestChevronLeft.gif) |
sgChevronRight | ![[转载]Delphi-XE5-手势操作-Gestures-使用方法 image:64GestChevronRight.gif](http://docwiki.embarcadero.com/images/RADStudio/e/6/6e/64GestChevronRight.gif) |