2014-07-10 58 views
0

我有一个gridpanellayout约有16行和5列。例如,每个字段都有一个设置为TalignLayout.Client的TRectangle。每个矩形都有一个onclick事件来执行一个动作(例如,通过改变其颜色来突出显示被点击的矩形)。有16行,我的网格面板超过了用户设备(如iPhone)的高度,因此我将网格放置在VerticalScrollbox的顶部。滚动vs选择德尔福XE6

在使用手指滚动的用户与使用触摸来突出显示项目之间破译的最佳方式是什么?我想最简单的选择,我想到了它只是将点击事件改为双击事件。

有什么建议吗?

回答

0

我的建议和解决方法是在两者之间使用MouseDown和MouseDown Events进行一些时间测量。

unit UnitMainForm; 

interface 

uses 
    System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, 
    FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, 
    FMX.Layouts; 

    type 
    TForm1 = class(TForm) 
    VertScrollBox1: TVertScrollBox; 
    GridPanelLayout1: TGridPanelLayout; 
    Button1: TButton; 
    Button2: TButton; 
    Button3: TButton; 
    Button4: TButton; 
    Button5: TButton; 
    Button6: TButton; 
    Button7: TButton; 
    Button8: TButton; 
    Button9: TButton; 
    Button10: TButton; 
    Button11: TButton; 
    Button12: TButton; 
    procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; 
     Shift: TShiftState; X, Y: Single); 
    procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; 
     Shift: TShiftState; X, Y: Single); 
    private 
    { Private-Deklarationen } 
    FTimeStamp: TDateTime; 
     public 
    { Public-Deklarationen } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.fmx} 

uses 
    System.DateUtils; 

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Single); 
begin 
    FTimeStamp := Now; 
    TButton(Sender).Text := 'Mouse Down'; 
end; 

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Single); 
begin 
    TButton(Sender).Text := 'Mouse Up ' + IntToStr(MilliSecondOf(Now-FTimeStamp)); 
    if (MilliSecondOf(Now-FTimeStamp) < 200) then 
    begin 
    TButton(Sender).Text := TButton(Sender).Text + ' OK'; 
    end; 
end; 

end. 

如果时间少于200毫秒,建议使用手指触摸,并且您应该很好。