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

Прокрутка TListBox с эффектом листания

Вопрос

Хочу реализовать прокрутку фото с помощью TListBox.

Пока что в дизайне добавил пару Item и кинул на них TImageViewer, ну и картинку туда вставил.

В свойстве TListStyle указал Horizontal. На Windows не листается мышкой влево/вправо, но есть хотя бы полоса прокрутки внизу.

На андроид-устройстве и не листается, и полосы прокрутки нет вообще.

Это связано с этим вопросом http://fire-monkey.ru/topic/4301-выводотображение-нескольких-картинок-на-форме

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

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


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

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

  • 0

у картинок нужно убрать HitTest, но тогда картинки не будут получать сообщения тапа/мыши

варианты:

  • использовать TListView
  • выключить HitTest у картинок и в событии TListBox определять позицию картинки по координатам тапа/мыши и выполнять действие

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


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

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

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


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

я ходил вторым путем. просто определял куда кликнули. это копеешная операция. и никаких архитектур...

только еще глубже) на простом скроллбоксе

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
13 часа назад, Равиль Зарипов (ZuBy) сказал:

у картинок нужно убрать HitTest

Спасибо, помогло.

 

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


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

В среде выбирал Style - "Android" и "Windows", но свойство Text в приложении не видно, оно скрыто.

А как только запустил приложение на смартфоне, то вижу текст и рядом картинку. Т.е. как бы несоответствие.

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


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

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

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

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

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

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

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

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

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


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

    • От Вячеслав
      Добрый день, форумчане! Столкнулся со следующей задачей: 
      Имеется TListBox с 32 итемами, задаются в DesignTime. В некоторых ситуациях требуется убрать половину, оставить только первые 16 итемов. Я делаю лишние невидимыми, но при этом область прокрутки листбокса остается прежней и излишне большой. В связи с этим вопрос: можно ли как-то ограничить область прокрутки? 
      XE7, Windows.
    • От x11
      Можно ли во время работы программы вызвать Items editor, который я вызываю во время дизайна приложения?
      Или свой лисапет создавать?
    • От x11
      Процедура добавления Item
       
      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.PopupMenu := PopupMenu1; imageV := TImageViewer.Create(lbPhotos); imageV.HitTest := False; imageV.Parent := item; imageV.Align := TAlignLayout.Client; imageV.Bitmap.Assign(image); item.SetFocus; end; У popupmenu есть 2 пункта, привязанных к Action.
       
      Gestures срабатывает на "long tap"
      procedure TfmEditObject.lbPhotosGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); var c: IControl; ListBox: TListBox; lbxPoint: TPointF; ListBoxItem: TListBoxItem; begin if EventInfo.GestureID = igiLongTap then if (sender is TListBox) and assigned(TListBox(sender).Selected) then begin c := ObjectAtPoint(EventInfo.Location); if Assigned(c) then if Assigned(c.GetObject) then if c.GetObject is TListBox then begin ListBox := TListBox(c.GetObject); lbxPoint := ListBox.AbsoluteToLocal(EventInfo.Location); ListBoxItem := ListBox.ItemByPoint(lbxPoint.X, lbxPoint.Y); if Assigned(ListBoxItem) then PopupMenu1.Popup(lbxPoint.X, lbxPoint.Y); Handled := True; end; end; end;  
      Ставил точку останова, видно, что до строки "PopupMenu1.Popup(lbxPoint.X, lbxPoint.Y);" доходит.
      Если программа работает на Windows, то меню отображается по правой кнопке мышки, а на андроид устройстве меню не отображается по Long Tap.
       
      Как видно из кода, то меню прикручивается к ListBoxItem, а непосредственно к TListBox меню прикрутил в дизайне.
    • От x11
      В свойстве TListBox.ListStyle установил значение Horizontal. Список поменял вид.
      Теперь ставлю Vertical, но ничего не происходит.
      Как вернуть стиль списка обратно к вертикальному?
    • От Euvene
      Добрый день, возникла такая проблемка: при добавлении в ListBoxItem компонента TEdit если поставить ему TControlType::Platform он вылазит за пределы ListBox но при Styled все норм, кто нибудь сталкивался и как с этим бороться?


    • От ENERGY
      Что лучше в плане производительности использовать из этих компонентов для Android и iOS?
      Мне показалось что TlistBox как то дольше создается и грузится (я использую фрэймы (TFrame), которые создаются в RunTime, но сделаны они в Design Time) 
      На компоненте будут лежать Editbox 2x, лэйблы, Tmemo, DateEdit, TimeEdit.
      TListBox удобен тем что (я так понимаю) он автоматом подстроит визуальный стиль заголовков и пунктов под текущую систему (fix me?).
      А вот TScrollBar это не сделает. Кстати, если использовать этот компонент, скроллбар, как отделить пункты рамкой (горизонтальной чертой?). Может есть какой то межплатформенный TBorder, который отображается в нужной стиле? А если использовать TLine то какого цвета его делать (DarkGray?), кто нибудь знает?
      Спасибо.
    • От chaplin.u@gmail.com
      Как сделать разделители между итемами. Как на картинке.

    • От AlexG
      Привет друзья!
      Возникла странная ситуация при работе с TListBox. А именно - при попытке прокрутки списка в его конец.
      Условно:
      - есть список итемов (сообщения чата);
      - загрузка сообщений происходит в процедуре "синхронизированной" с главным потоком и заключена в TListBox(listbox1).BeginUpdate  и TListBox(listbox1).EndUpdate;
      - все замечательно грузится
      НО! После загрузки Итемов требуется прокрутить список в его конец. И вот тут начинаются "приколы".
      Как только не пытаться прокрутить список в его конец (разные способы, см.ниже) - всегда получается, что список прокручивается до конца, но немного "откатывается" вверх. Размер его автоматического скролла "обратно" зависит от количества Item в TListBox! Чем больше кол-во Item - тем больше назад откатывается скролл.
      Способы прокрутки в конец списка - значения не имеют. Всегда одно и то же.
      procedure TChatListBoxEx.ScrollToLast; var   Item: TListBoxItem; begin // ВАРИАНТ 1   Item := ListItems[Items.Count - 1];   if Assigned(Item) then     ScrollToItem(Item); // ВАРИАНТ 2   ViewportPosition:= TPointF.Create(0, Item.ParentedRect.Top); // ВАРИАНТ 3   ScrollBy(0, ViewportPosition.Y - Item.ParentedRect.Top); // ВАРИАНТ 4   BeginUpdate;   try     ItemIndex := Items.Count - 1;   finally     EndUpdate;   end; end; Предупреждая ваши вопросы, сразу скажу - пробовал и другие варианты, просто перечислять не стал все. Пробовал и эмитировать нажатие клавиши END при "активном" списке.
      Все синхронизируется, типа 
      TThread.Synchronize(nil, listbox1.ScrollToLast); Эффект всегда один и тот же...
      НО! Если загрузить список, независимо от кол-ва элементов списка, а потом в программе вызвать ScrollToLast, подождав некоторое время, а не сразу, например по нажатию на какую-нибудь кнопку, то список прокрутится в конец НОРМАЛЬНО!
      Будьте добры - кто сталкивался с подобной ситуацией, или кто что-то может посоветовать?
      Или наши Гуру смогут ответить на этот вопрос?
      Видео, чтобы было понятнее что происходит, прилагаю.
      RAD Studio 10.1 Berlin (эффект наблюдается на всех версиях Windows - XP, Vista, 7, 8, 10. На других ОС пока не пробовал...)
      Заранее благодарен!
      P.S. Возник вопрос (как вариант решения проблемы) - как узнать, что произошло событие окончания отрисовки TListBox? А именно - список заполнился, выполнилась отрисовка и можно прокручивать.
    • От M1shQa
      Есть один листбокс..) В общем парился я парился, так и не понял как запилить стиль по человечески для итемов в боксе и нашел кнопку Edit default Style. Нашел куда впилить TimageViewer и поставил ему свойство client. Все бы ничего, да вот размер итемов не статичен, а картинка не растягивается, к тому же pngшная картинка не отделяется от фона. Подскажите, как картинку растягивать в зависимости от длины и ширины итемов листбокса и как правильно юзать pngшные картинки (что бы они сохраняли прозрачность). Может я вообще не туда рою и нужно другими способами вставлять картинки под каждый item? Видел много гайдов под listview, но к сожалению мне нужно именно для бокса..
      ----
      п.с. что бы было проще: как нарисовать ровную плашку позади каждого элемента листбокс?
    • От chaplin.u@gmail.com
      Поставил несколько TCheckBox на TListBox и на 4 инчевой  мобилке очень плохо реагируют на нажатия пальцами. В лучшем случае требуется пару раз тапнуть а то и пять-шесть.
      Причём пока никакого кода не вводил. По умолчанию у всех стоит  HitTest = True.
  • Последние посетители   0 пользователей онлайн

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

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