2014년 9월 24일 수요일

Long Touch event generation method for Delphi XE5~XE7 Firemonkey On Android, iOS, OSX, And Windows

OnMouseClick event is used for Short Touch event in Button or ListBox, etc.
Delphi in FireMonkey do not provide a Long touch event separately.
Android or iOS smart device determines a long Touch time about 0.7 to 1.0 seconds normally .
Thus, Long Touch can be determined by measuring the count timer 0.1 seconds while pressing the button or any other objects.


Button이나 ListBox등에 사용되는 OnMouseClick 이벤트는 터치 단말기에서 숏터치에 사용 된다.
Delphi FireMonkey에서는 별도의 롱터치 이벤트를 제공하지 않는다.
따라서 롱터치 이벤트를 적용하기 위해서는 OnMouseDown 이벤트 싯점에 타이머를 가동하여 일정 시간이 흐른 후 롱터치로 판단하여 처리 할 수 있다.
안드로이드 또는 iOS 스마트 단말기는 보통 0.7~1.0 초 정도의 시간동안 사용자가 버튼을 누르고 있으면 롱터치로 판단한다.
따라서 버튼을 누르고 있는동안 0.1초 간격으로 타이머를 발생시켜 그 횟수를 측정하면 된다.


[Method]

1. OnMouseDown : Timer Start
2. OnMouseUp : Count Timer ~ Short Touch Event
3. OnTimer : Increase Timer Count ~ Long Touch Event

[Example source code]

1. Timer Initialize

  • Enable : False
  • Interval : 100 (msec)

2. Global variable declaration

var
  ClickInterval : Cardinal = 0;
const
   LONG_TIME = 8;  // Long Touch Time : 0.8 sec

3. Event Handlers work

procedure TForm1.ListBoxItem1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
   ClickInterval := 0;
   Timer1.Enabled := TRUE;
end;

//**********************************************************************************
// Short Touch
procedure TForm1.ListBoxItem1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
   if ClickInterval < LONG_TIME then
   begin
      Timer1.Enabled := FALSE;
      ClickInterval := 0;
      ShowMessage( 'ListBox Shot Touch..!!');
    end;
end;

//***************************************************************************************
// Long Touch
// Called once every 0.1 seconds ->  When the 8th call is a Long touch
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   ClickInterval := ClickInterval + 1;

   if ( ClickInterval = LONG_TIME ) then
   begin
      Timer1.Enabled := FALSE;
      ShowMessage( 'ListBox Long Touch..!!');
   end;
end;

Full Source Download (Delphi XE7)


댓글 없음:

댓글 쓰기