Прокрутка против выбора Delphi XE6

У меня есть gridpanellayout, который имеет около 16 строк и 5 столбцов. Каждое поле имеет, например, TRectangle, установленный в TalignLayout.Client. Каждый прямоугольник имеет событие onclick, которое выполняет действие (например, выделяет прямоугольник, на который нажали, путем изменения его цвета). С 16 строками моя сеточная панель превышает высоту пользовательского устройства, такого как iPhone, и поэтому у меня есть Сетка, помещенная поверх VerticalScrollbox.

Что было бы наилучшим способом расшифровки между пользователем с помощью пальца для прокрутки, а не с помощью касания, чтобы выделить элемент. Я полагал, что самый простой вариант, который я придумал, это просто изменить событие при нажатии на событие двойного щелчка.

Какие-либо предложения?

1 ответ

Мое предложение и обходной путь - использовать 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 мс, предлагается касание пальцем, и вам стоит начинать.

Другие вопросы по тегам