В Firemonkey, как принудительно вызвать триггер события OnGesture перед событием OnClick?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 В Firemonkey, как принудительно вызвать триггер события OnGesture перед событием OnClick?

Сообщение Anonymous »

У меня есть мобильное приложение Delphi (Александрия), которое делает снимки с помощью TCamera. Эти изображения хранятся в базе данных sqlite. Приложение отображает TImage, и когда пользователь щелкает по нему, камера активируется, и изображение непрерывно отображает изображения, пока он не будет щелкнут еще раз. В этом случае изображение сохраняется в поле большого двоичного объекта в базе данных, а камера деактивируется. Все работает нормально: (некоторые коды опущены, чтобы подчеркнуть самое важное)

Код: Выделить всё

procedure TfrmMain.imgBufferClick(Sender: TObject);
begin
inherited;
// if it is active, store and deactivate
If (camMain.Active) Then Begin
camMain.SampleBufferToBitmap(imgBuffer.Bitmap,True);
// code to store
StopCam ()
End
// else, activate
Else
StartCam ()
end;
Теперь, в связи с новыми требованиями, пользователи хотят прокручивать сохраненные изображения, а также хотят сохранить функциональность щелчка. Жест показался мне естественным, поэтому я добавил к изображению TGestureManager, включил соответствующие жесты и написал обработчик событий OnGesture:

Код: Выделить всё

procedure TfrmMain.imgBufferGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);

begin
inherited;
With tableWithImages Do
Case EventInfo.GestureID Of
sgiLeft            : Prior;
sgiRight           : Next;
sgiSemiCircleLeft  : First;
sgiSemiCircleRight : Last
End;

UpdateScreen (1);      // loads the picture and other information on the app
Handled := True
end;
Вот проблема: я новичок в Android и не знаю, является ли это стандартным поведением, но после срабатывания триггеров OnGesture также появляется OnClick< /em> делает (позже я обнаружил, что это наоборот). Первоначально я предполагал, что OnGesture было изолированным событием, поэтому я добавил флаг типа:

Код: Выделить всё

procedure TfrmMain.imgBufferGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);

begin
inherited;
With tableWithImages Do
Case EventInfo.GestureID Of
sgiLeft            : Prior;
sgiRight           : Next;
sgiSemiCircleLeft  : First;
sgiSemiCircleRight : Last
End;

UpdateScreen (1);      // loads the picture and other information on the app
Handled := True;
FLAG_TO_INDICATE_GESTURE := True // global property
end;

procedure TfrmMain.imgBufferClick(Sender: TObject);
begin
inherited;
If (FLAG_TO_INDICATE_GESTURE) Then Begin
FLAG_TO_INDICATE_GESTURE := False;
Exit
End;

// if it is active, store and deactivate
If (camMain.Active) Then Begin
camMain.SampleBufferToBitmap(imgBuffer.Bitmap,True);
// code to store
StopCam ()
End
// else, activate
Else
StartCam ()
end;
Что еще больше усложняет ситуацию, OnClick срабатывает BEFORE OnGesture и поэтому FLAG_TO_INDICATE_GESTURE< /em> бесполезен.
Итак, как я могу заставить OnGesture срабатывать до OnClick или вообще не срабатывать, когда пользователь делает жест? Я хочу, чтобы приложение вело себя следующим образом:
  • Если пользователь делает жест, отвечайте на него, но не запускайте OnClick
    Если пользователь нажимает на изображение, отвечайте как обычно


Подробнее здесь: https://stackoverflow.com/questions/792 ... lick-event
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»