您的位置:首页 > 编程语言 > Delphi

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 枚举类型:


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);


EnumSymbol
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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: