我有一个gridpanellayout,大约有16行和5列。例如,每个字段具有设置为TalignLayout.Client的TRectangle。每个矩形具有执行动作的onclick事件(例如,通过改变其颜色突出显示所点击的矩形)。有16行,我的网格面板超过了用户设备(如iPhone)的高度,因此我将网格放在VerticalScrollbox的顶部。
在使用手指滚动的用户和使用触摸突出显示项目的用户之间进行解密的最佳方法是什么。我认为这是最简单的选择,我只想将点击事件更改为双击事件。
有什么建议吗?
答案 0 :(得分:0)
我的建议和解决方法是使用MouseDown和MouseDown事件,并在其间进行一些时间测量。
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毫秒,建议使用手指触摸,你应该好好去。