четверг, 4 сентября 2014 г.

XE7: Multi-Touch Support

Написал небольшое приложение для проверки Multi-Touch'а. Код самый простой, но всё работает ;) Эта заметка к посту Что нового в XE7 или сравнение с XE6...

Обновление 6.09.14. Написано на Delphi XE7, Android 4.1.2.
Upd (3.10.14). Проверено на Android 4.4.2.

Обновление от 13.11.19. Код выложил через ГитХаб. Удалил пару лишних строк. Проверил на Delphi 10.3.1.









У формы появилось событие OnTouch, которое выглядит так:
FormTouch (Sender: TObject; const Touches: TTouches;  const Action: TTouchAction);

Возвращает:
Touches – тип TTouches, это массив «array of TTouch». Каждый TTouch, содержит координаты точки «Location».
Action - тип TTouchAction, возвращает действие «None, Up, Down, Move, Cancel», но для всех точек это значение одинаково.
Мне кажется, было бы лучше, если бы для каждой точки действие было своё и хранилось в «TTouch.Action», не понимаю, почему разработчики не сделали так. Или я что-то упускаю…


Код:
unit Unit2;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls;
type
TForm2 = class(TForm)
labCountTouch: TLabel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
procedure FormTouch(Sender: TObject; const Touches: TTouches; const Action: TTouchAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
procedure TForm2.FormTouch(Sender: TObject; const Touches: TTouches; const Action: TTouchAction);
var
I: Integer;
LabelTouch: TLabel;
begin
labCountTouch.Text := Length(Touches).ToString;
for I := Low(Touches) to High(Touches) do
begin
LabelTouch := TLabel(FindComponent('Label' + (I + 1).ToString));
LabelTouch.Position.X := Touches[I].Location.X;
LabelTouch.Position.Y := Touches[I].Location.Y;
LabelTouch.Text := Format('Touch - %d (%fx%f)', [(I + 1), Touches[I].Location.X, Touches[I].Location.Y]);
end;
end;
end.
view raw gistfile1.pas hosted with ❤ by GitHub