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