Delphi-XE5-手势操作-Gestures-使用方法
2015-02-10 17:04
423 查看
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事件对手势进行判断和处理,代码如下:
procedure TTabbedwithNavigationForm.TabControl1Gesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
//识别事件的手势
case EventInfo.GestureID of
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事件,对硬件按钮进行识别,然后处理。代码如下:
procedure TTabbedwithNavigationForm.FormKeyUp(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
begin
//如果是硬件的返回按钮
if Key = vkHardwareBack then
begin
//在特定的页面上,返回上一个页面
if (TabControl1.ActiveTab = TabItem1) and (TabControl2.ActiveTab = TabItem6) then
begin
//指定页面
TabControl2.ActiveTab = TabItem5;
//已处理键盘的键值
Key := 0;
end;
end;
end;
二、总结一下自己的经验:
1.在窗体上使用并放置一个TGestures控件是必需的
2.如果要操作控件,并使按件能支持手势操作,还要进行一些相应的设置才能使用
3.
本经人试验(由于这玩意开发太慢,没办法一个个试出来,要好久的),主窗体的Touch下的GestureManager属性要指定TGestures控件,然后在Gestures下的Standard属性下要选中相应的动作,比如:
Left:从右到左划动
Right:从左到右划动
Up:从下到上划动
Down:从上到下划动
UpLeft:从下到上左
UpRight:从下到上右
剩下的你自己可以理解了..........
这里建议你只选你要的动作,不要什么动作都支持,那样的结果只会导致你的程序变的巨慢
这里还有一个属性集:
InterActiveGestures:交互手势
igZoom:选择为True后可以支持放大缩小功能
igPan:百度翻译为锅
应该是支持画圆等操作(这个等我证实后再更正)
igRotate:旋转
igTwoFingerTap:支持两个手指同时操作
igPressAndTap:新闻和水龙头(百度翻译)实际应该理解为手指划折线的支持(有待证实)
igLongTap:长的水龙头(百度翻译)实际理解为手指画长折线的支持(有待证实)
igDoubleTap:双击操作(字面理解,也没实践)
4.不支持动作的解决
可在窗体上放置一个标签用来显示动作值,即在窗体的onGesture事件中捕获EventInfo.GestureID的常量,通常从右往左手势的值为1,从左至右的手势值为2,如果能正确显示相应数值,基本上手势是在这个应用上被支持了,但至于你的手势是否被响应了,这要看你的代码了。
5.手势参考
Delphi 把可以识别的手势分成了 3 类: 标准手势、自定义手势、交互手势(InteractiveGestures).
其中的交互手势用鼠标不好模拟, 可能只能用于触摸屏;
Delphi 预定义了 34 种标准手势, 并定义成 TStandardGesture 枚举类型:
一、首先转载一下别人的方法介绍:
今天尝试了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事件对手势进行判断和处理,代码如下:
procedure TTabbedwithNavigationForm.TabControl1Gesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
//识别事件的手势
case EventInfo.GestureID of
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事件,对硬件按钮进行识别,然后处理。代码如下:
procedure TTabbedwithNavigationForm.FormKeyUp(Sender: TObject; var Key: Word;
var KeyChar: Char; Shift: TShiftState);
begin
//如果是硬件的返回按钮
if Key = vkHardwareBack then
begin
//在特定的页面上,返回上一个页面
if (TabControl1.ActiveTab = TabItem1) and (TabControl2.ActiveTab = TabItem6) then
begin
//指定页面
TabControl2.ActiveTab = TabItem5;
//已处理键盘的键值
Key := 0;
end;
end;
end;
二、总结一下自己的经验:
1.在窗体上使用并放置一个TGestures控件是必需的
2.如果要操作控件,并使按件能支持手势操作,还要进行一些相应的设置才能使用
3.
本经人试验(由于这玩意开发太慢,没办法一个个试出来,要好久的),主窗体的Touch下的GestureManager属性要指定TGestures控件,然后在Gestures下的Standard属性下要选中相应的动作,比如:
Left:从右到左划动
Right:从左到右划动
Up:从下到上划动
Down:从上到下划动
UpLeft:从下到上左
UpRight:从下到上右
剩下的你自己可以理解了..........
这里建议你只选你要的动作,不要什么动作都支持,那样的结果只会导致你的程序变的巨慢
这里还有一个属性集:
InterActiveGestures:交互手势
igZoom:选择为True后可以支持放大缩小功能
igPan:百度翻译为锅
应该是支持画圆等操作(这个等我证实后再更正)
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);
相关文章推荐
- Delphi-XE5-手势操作-Gestures-使用方法
- Delphi中使用OLE方法操作Excel
- 在Delphi中使用CreateOleObject方法对WORD文件进行操作
- Delphi中使用OLE方法操作Excel
- 在Delphi中使用CreateOleObject方法对WORD文件进行操作
- delphi中实现用字符串表示并操作控件的方法。
- 数据库操作中(T-SQL)经常会用到命令及使用方法
- 使用Delphi 7控制Word 2000生成文档的方法
- "操作必须使用一个可更新的查询"错误的解决方法
- "执行SQL语句时出现问题操作必须使用一个可更新的查询"错误的解决方法
- 一个使用特殊符号分割的字符串解码方法(Delphi版)
- 使用Delphi,显示ActiveX控件的属性页方法
- 在delphi中使用xml文档有两种方法
- 使用JDBC4.0操作XML类型的字段(保存获取xml数据)的方法
- Delphi中Hash表的使用方法! 推荐
- 使用Java操作文本文件的方法详解
- VC 7.0 中使用CDaoRecordset 类/使用Dao 方法操作数据库
- ADO.NET中使用getchanges方法提速(更新回数据库操作)
- 通知php使用自定义的session处理函数来操作session,而不使用php预置的方法
- opengl 的矩阵操作的使用方法