0

我有一个大约 16 行和 5 列的网格布局。例如,每个字段都有一个设置为 TalignLayout.Client. 的 TRectangle。每个矩形都有一个执行操作的 onclick 事件(例如,通过更改其颜色突出显示单击的矩形)。我的网格面板有 16 行,超过了 iPhone 等用户设备的高度,因此我将 Grid 放置在 VerticalScrollbox 的顶部。

在用户使用手指滚动和使用触摸突出显示项目之间进行解读的最佳方式是什么。我应该是最简单的选择,我认为它只是将点击事件更改为双击事件。

有什么建议么?

4

1 回答 1

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 毫秒,则建议进行手指触摸,您应该很高兴。

于 2014-07-11T09:21:46.757 回答