2014-07-10 56 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毫秒,建議使用手指觸摸,並且您應該很好。