Перейти к содержанию
  • Регистрация
  • 0
x11

ListBoxItem и OnGesture

Вопрос

У 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?

 

Screenshot_74.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0
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

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Здесь

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. Рвботает, но только на Андроиде.

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

у ListBoxItem'а Hittest = False. Если выставить True - то жесты заработают для итема. Но тогда возможны проблемы со скороллом. Поэтому лучше жест обрабатывать в ListBox'е. А там уже по координатам жеста можно определить, над каким итемом происходит LongTap

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, sinuke сказал:

у ListBoxItem'а Hittest = False. Если выставить True - то жесты заработают для итема. Но тогда возможны проблемы со скороллом.

да, поэтому отключено

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От МихаилЪ чайковЪ
      Именно палец, а не мышь. При этом нужно, чтобы при нажатии в моё приложение можно было нажимать и в других - примерно так себя ведут экранная клавиатура и тачпад. Реализуется что-то типа экранного джойстика
      Уже пробовал использовать
      LongTap: здесь проблема в том, что длинное нажатие бывает длинным WM_TOUCH не работает Через OnMouseDown не вышло, так как чтобы сработало, нужно пошевелить пальцем, а я хочу, чтобы поставил и заработало
    • От VirusZ2D
      Есть 5 итемов  у listbox свойство Allowc drag = true  итемы переносятся в нутри листа все путем 
      но как только включаю у итемов HitTest = true переносимость проподает (((.
      (Еще замечание если DragMode = dmAutomatic и HitTest = true  то итем можно поменять с итемом у которого HitTest = false)
      Как заставить их меняться ?
    • От x11
      Первая картинка - Master. Здесь всё правильно. А вот две другие картинки
      Вторая - iPhone 5,5"
      Третья - Android 5" Phone
      Четвертая - Android 7" Tablet
      У всех компонент Align := Right.
      Это зависит от каких-то свойств?
       
      Проверил на iPhone 4"  - норм. На iPhone 4.7"  - тоже криво.




    • От dim
      Создаю динамически ListBoxItem и размещаю на них кнопу
      lbi:=TListBoxItem.Create(ListBox2); lbi.Parent:=ListBox2; lbi.StyleLookup:='listboxitembottomdetail'; lbi.Height:=57; lbi.ItemData.Text:='Добавить'; lbi.ItemData.Detail:=''; SpeedButton2:=TSpeedButton.Create(lbi); SpeedButton2.Action:=del_adres; SpeedButton2.Align:=TAlignLayout.Right; SpeedButton2.StyleLookup:='trashtoolbutton'; SpeedButton2.Width:=48; SpeedButton2.Parent:=lbi; SpeedButton2.Tag:=ListBox2.Count-2; как при нажатии на кнопку получить ее ListBoxItem чтобы удалить
    • От sinuke
      Привет
      Не понимаю, почему не обрабатывается событие OnGesture на Rectangle в простейшем проекте (project-2). Пару дней назад создал тестовый проектик (project-1), все проверил и все работает отлично. Сегодня создаю простейшие проекты, кидаю один Rectangle, создаю событие OnGesture, в котором делаю какое-нибудь простейшее действие, но оно не обрабатывается. Не могу понять, что я делаю не так. Помогите разобраться.... Примеры прилагаю.
      П.С. Delphi Berlin без апдейта, Android
      project-1.zip
      project-2.zip
    • От chaplin.u@gmail.com
      У меня есть ListBox с 7 ListBoxItem , на каждом ListBoxItem есть 7 CheckBox-ов.
      Получается как-бы двухмерный массив CheckBox-ов. 
      Какой самый простой способ обращаться к каждому конкретному CheckBox-у ?
    • От Rusland
      У меня стоит WordWrap=true.
      Бывает так что текста больше чем обычно и он весь не помещается и обрезается. Как программно определить что текст не умещается?
    • От Rusland
      Добавил на ListBoxItem эффект InnerGlowEffect. Trigger=IsPressed=true 
      Но когда я нажимаю на этот ListBoxItem, то никакого эффекта не происходит. Почему?
      Пробовал все возможные Trigger-ы - никакого толку.
      Вообще реально придать какой-нибудь эффект помимо InnerGlowEffect?
       
      PS. Пока делаю так: 
      procedure TFrmMain.ListBoxItem1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin InnerGlowEffect1.Enabled:=true; end; procedure TFrmMain.ListBoxItem1MouseEnter(Sender: TObject); begin InnerGlowEffect1.Enabled:=true; end; procedure TFrmMain.ListBoxItem1MouseLeave(Sender: TObject); begin InnerGlowEffect1.Enabled:=false; end;  
    • От ivadimos
      Могу ли я каким-то образом вставить Item не в конец списка, а после определённого?
    • От Rusland
      Если обращаться к активному элементу в ListView по LongTap, то можно нарваться на Access Violation. 
      Как этого добиться: Должен быть включен CanSwipeDelete. Делаем свайп, появляется кнопка Удалить. Теперь в любом месте делаем долгий тап на любом элементе и ловим AV.
       

      //на форме SpeedButton и ListView procedure TForm1.ListView1Gesture(Sender: TObject; const [Ref] EventInfo: TGestureEventInfo; var Handled: Boolean); begin if (EventInfo.GestureID=igiLongTap)or(EventInfo.GestureID=igiDoubleTap) then begin SpeedButton1.Text:=TListViewItem(ListView1.Selected).Text; end; end; procedure TForm1.SpeedButton1Click(Sender: TObject); var Item: TListViewItem; I:integer; begin ListViewPV.BeginUpdate; for I := 1 to 100 do // заполняем begin Item := ListViewPV.Items.Add; Item.ButtonText:= 'Button text'; Item.Text := 'Text '+IntToStr(I); Item.Detail := 'Detail '; Item.Accessory:=TAccessoryType.More; end; ListViewPV.EndUpdate; end;   
      Приходится проверять что ListView1.Selected<>nil
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...