x11 Опубликовано 30 июля, 2017 Опубликовано 30 июля, 2017 У ListBoxItem нужно реализовать вызов контекстного меню. На ListBoxItem лежит ImagesViwer с картинкой и у ImagesViwer свойство HitTest отключено. почитал справку http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Gestures_in_FireMonkey сделал как описано: procedure TfmEditObject.AddPhoto(Image: TBitmap); Var item: TListBoxItem; imageV: TImageViewer; begin item := TListBoxItem.Create(lbPhotos); item.parent := lbPhotos; item.text := ''; item.Width := lbPhotos.Width; item.Touch.GestureManager := GestureManager1; item.Touch.InteractiveGestures := [TInteractiveGesture.LongTap, TInteractiveGesture.DoubleTap]; item.OnGesture := ListBoxItemGesture; imageV := TImageViewer.Create(lbPhotos); imageV.HitTest := False; imageV.Parent := item; imageV.Align := TAlignLayout.Client; imageV.Bitmap.Assign(image); item.SetFocus; end; procedure TfmEditObject.ListBoxItemGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); Var s: string; begin if GestureToIdent(EventInfo.GestureID, s) then ShowMessage( S ); if EventInfo.GestureID = igiLongTap then ShowMessage( Sender.ClassName ); Handled := True; end; Ничего не происходит. На на андроид устройстве, ни на винде. И правильно ли я понял, что для LongTap, т.е. для InteractiveGestures не нужен GestureManager? Цитата
0 x11 Опубликовано 30 июля, 2017 Автор Опубликовано 30 июля, 2017 (изменено) 5 минут назад, x11 сказал: И правильно ли я понял, что для LongTap, т.е. для InteractiveGestures не нужен GestureManager? In order to use Interactive Gestures such as zoom and rotate in a component, you do not need to associate the component with a Gesture Manager. http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Gesturing_Overview Изменено 30 июля, 2017 пользователем x11 Цитата
0 x11 Опубликовано 30 июля, 2017 Автор Опубликовано 30 июля, 2017 (изменено) Здесь https://stackoverflow.com/questions/35921419/firemonkey-how-to-add-longtap-gesture-to-runtime-made-listboxitems/35938554 подсказывают, что Цитата Gestures dont work with controls inside ScrollBox and descendants (I don't know, why). You should use ListBox.Touch, ListBox.OnGesture and analyze Selected property. Сделал для ListBox. Рвботает, но только на Андроиде. Изменено 30 июля, 2017 пользователем x11 Цитата
0 sinuke Опубликовано 31 июля, 2017 Опубликовано 31 июля, 2017 у ListBoxItem'а Hittest = False. Если выставить True - то жесты заработают для итема. Но тогда возможны проблемы со скороллом. Поэтому лучше жест обрабатывать в ListBox'е. А там уже по координатам жеста можно определить, над каким итемом происходит LongTap Цитата
0 x11 Опубликовано 31 июля, 2017 Автор Опубликовано 31 июля, 2017 1 час назад, sinuke сказал: у ListBoxItem'а Hittest = False. Если выставить True - то жесты заработают для итема. Но тогда возможны проблемы со скороллом. да, поэтому отключено Цитата
Вопрос
x11
У ListBoxItem нужно реализовать вызов контекстного меню.
На ListBoxItem лежит ImagesViwer с картинкой и у ImagesViwer свойство HitTest отключено.
почитал справку http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Gestures_in_FireMonkey
сделал как описано:
procedure TfmEditObject.AddPhoto(Image: TBitmap); Var item: TListBoxItem; imageV: TImageViewer; begin item := TListBoxItem.Create(lbPhotos); item.parent := lbPhotos; item.text := ''; item.Width := lbPhotos.Width; item.Touch.GestureManager := GestureManager1; item.Touch.InteractiveGestures := [TInteractiveGesture.LongTap, TInteractiveGesture.DoubleTap]; item.OnGesture := ListBoxItemGesture; imageV := TImageViewer.Create(lbPhotos); imageV.HitTest := False; imageV.Parent := item; imageV.Align := TAlignLayout.Client; imageV.Bitmap.Assign(image); item.SetFocus; end; procedure TfmEditObject.ListBoxItemGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); Var s: string; begin if GestureToIdent(EventInfo.GestureID, s) then ShowMessage( S ); if EventInfo.GestureID = igiLongTap then ShowMessage( Sender.ClassName ); Handled := True; end;Ничего не происходит. На на андроид устройстве, ни на винде.
И правильно ли я понял, что для LongTap, т.е. для InteractiveGestures не нужен GestureManager?
4 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.