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

ListView скрывает повторяющийся текст заголовков

Вопрос

Если у элементов, идущих подряд одинаковый текст, то текст скрывается.

Как это это отключить?

 

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

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


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

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

  • 0

Наверное я не совсем понятно пояснил.

Я имел ввиду, что в режиме DynamicApearance есть заголовок HEADER у всех Item`ом.

Так вот если заголовок повторяется, то повторяющиеся заголовки не выводятся, а должны.

На картинке "Заголовок3" повторяется 2 раза подряд, поэтому в красном прямоугольник название заголовка отсутствует, а оно должно  быть в любом случае.

Screenshot_37.png

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


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

ну так, все правильно, это же группировка... измените один из заголовков, не будет такого...

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


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

Так вот как отключить эту "группировку"?

Думаю, что в вашем случае, не надо использовать группировку, а рисовать просто кастомные итемы, такие какие нужно!

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


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

Данные тянутся из базы и всё заполняется через LiveBinding. Item имеет разные метки, кнопки, картинку.

Пришлось создать в SQL запросе новое поле из двух других, где данные на 100% уникальны и заполнять этим полем header.

Кстати, LiveBinding подвал у Item`а не видит и непонятно как его заполнять.

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


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

OFF. вот сто раз уже писали, LiveBinding is DeadBinding )) Надо все руками. Быстро и надежно

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


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

да. в onUpdate или в onUpdating я их все время путаю

фигачим по 10 однотипных строк на каждый элемент итема и получаем полный контроль

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

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


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

Опять вопрос по header/footer.

Livebindibg видит хотя бы header, footer не видит.

А как в коде туда что-то записать, я так и недопёр.

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


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

вот кусок из рабочего кода.

Скрытый текст

procedure TJudgesFrame.lvMainUpdatingObjects(const Sender: TObject;
  const AItem: TListViewItem; var AHandled: Boolean);
var
  T,D:TListItemText;
  img:TListItemImage;
  acc:TListItemAccessory;
  jd:TJudgeData;
begin
  jd:=FJudgesList[AItem.Index];

  T:=aitem.Objects.FindObjectT<TListItemText>('T');
  D:=aitem.Objects.FindObjectT<TListItemText>('D');
  img := aitem.Objects.FindObjectT<TListItemImage>('I');;
  acc := AItem.Objects.FindObjectT<TListItemAccessory>('A');

  if T<>NIL then
  begin
    t.Font.size := 14.001;
    t.Font.Style := [TFontStyle.fsBold];
  end;
  if D<>NIL then
    D.Font.size := 13.001;
  if Acc<>NIL then
    acc.Visible:=false;
  if (img<>NIL) then
    img.ImageIndex := -1;
  AHandled := (t<>NIL)or(d<>NIL)or(img<>NIL);

  if (jd.Entered) then
  begin
    if T<>NIL then
      t.TextColor := TAlphaColorRec.Silver;
    if D<>NIL then
      d.TextColor := TAlphaColorRec.Silver;
  end
  else
  begin
    if T<>NIL then
      t.TextColor := TAlphaColorRec.Black;
    if D<>NIL then
      d.TextColor := TAlphaColorRec.Black;
  end;

end;
 

если протрассировать по FindObject, то можно найти все элементы, которые создаются автоматом при создании итема 

и заполнить тут, в коде

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


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

С месяц назад у меня стояла подобная задача отображения многострочной информации в списке. Парился я с кастомами в *list* в итоге понял, что единственный вариант - это TGrid. У него надо прописывать самому обработку нажатий с тачскрина, так как из коробки - это глюкалово. Но это по ходу единственный метод вывести список именно так, как хочется. Но тут конечно надо прописать немного кода будет....
 

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


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

я наоборот, справился без грида, выбрал LV,

Равиль вообще написал ModernLV где всё, говорят, еще проще

та же фигня. код надо писать ))

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


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

Вот так делать, я считаю, нельзя

FindObjectT<TListItemText>('T'); 

 

Что-то переименовал, удалил и забыл в коде поменять. И на этапе компиляции пропускаешь кучу ошибок.

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


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

ну во-1, я везде проверяю результат на Нил,  во-2, эти элементы создаются самим лв)) 

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


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

Это всё равно уже ПОСТ-проверка. Потом начинаешь искать проблему, почему не грузится то или иное значение.

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


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

для задачи побольше я писал мини фреймворк где элементы создавались по описанию,  так что опять ничего не перепутать 

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


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

с чего бы мелочь. несколько (а не стандартные текст/детейл)  элементов с разным оформлением и раскладкой, зависящих  от данных,  управление высотой итема, рисование самодельных элементов, иконок, реакция на клики 

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


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

с чего бы мелочь. несколько (а не стандартные текст/детейл)  элементов с разным оформлением и раскладкой, зависящих  от данных,  управление высотой итема, рисование самодельных элементов, иконок, реакция на клики 

Было бы Интересно посмотреть.... думаю многие бы что-нибудь полезного подчерпнули...:)

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


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

krapotkin, Вы хотя бы расскажите, в каком событии создаёте, а в каком заполняете Item`ы.

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


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

я выкладывал рабочий пример для берлина, как и что создается

 

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


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

 

А что такое Adapter и с чем его едят?

 

Что делает эта строка? Для чего она?

item.Adapter.ResetView(item);

В справке очень скудное и непонятное описание.

И ещё про ResetView - что это и для чего? Когда применять?

Спасибо.

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 21.12.2017 в 08:59, krapotkin сказал:

я выкладывал рабочий пример для берлина, как и что создается

 

 

Я так понял, в примере нет ни header, ни footer?

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


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

и header и footer это такие же текстовые элементы как и прочие и заполнять их можно точно так же

 item:=lvWallets.Items.Add;
 item.Purpose := TListItemPurpose.Header;

и при отрисовке проверять item.Purpose и рисовать по-другому...

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

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


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

В ручную всё создавать, когда есть визуальный редактор? Нет уж, увольте.

Прописывать каждое свойство всех меток: расположение, размеры, место и т.д.

Я как подумаю, что каждую метку "центрировать" в коде, запускать приложение, проверять, если не понравилось, сновать высчитывать и так по кругу....

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


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

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

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

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

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

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

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

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

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


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

    • От krapotkin
      Всем привет!
      После долгого творческого запоя я запилил альфу либы, которая позволяет юзать обычный, не-генномодифицированный ListView.
      Данные подаются в виде модели данных, описание раскладки итема лежит в JSON.

      Для работы пишется примитивный наследник класса-адаптера, который биндит данные модели на элементы из JSON. Я решил, что руками делать это дешевле чем через RTTI
      { TMyAdapter } procedure TMyAdapter.SetupDrawableContent(const ADrawable: TListItemDrawable; const AData: TMyData); begin if SameText( ADrawable.Name, 'text') then begin (ADrawable as TListItemText).Text := AData.Text; end else if SameText( ADrawable.Name, 'detail') then begin (ADrawable as TListItemText).Text := AData.Detail; end else if SameText( ADrawable.Name, 'balance') then begin (ADrawable as TListItemText).Text := FormatFloat('0.00', AData.Balance); end else if SameText( ADrawable.Name, 'reserved') then begin (ADrawable as TListItemText).Text := FormatFloat('0.00', AData.Reserved); end end; Главная хитрость и отличие от стандартного DynamicAppearance+LiveBinding - переменная высота итемов ListView и использование арифметики в описании раскладки.
      Можно указать Detail.Y  = Text.Bottom + 5, ItemHeight = Detail.Bottom + 10, Detail.W = ItemWidth/2 - X
      {"Kind":"rect","Name":"BonusRect","Value":"", "Place":{"X":"itemwidth*3/4","Y":"Text.Y","W":"ItemWidth/4-5","H":"50"}, "BorderColor":"#FF005500", "Color":"lime", "LineWidth":3}, {"TextHAlign":2,"TextVAlign":1,"Kind":"text","Name":"Balance","Value":"", "Place":{"X":"BonusRect.x+5","Y":"Text.Y","W":"BonusRect.w-10","H":"50"}, "WordWrap":true, "Color" :"Black", "Font":{"Size":18,"Style":""}} ], "ItemHeight":"detail.bottom+10", Это дает довольно гибкую систему. Не на все случаи жизни, но все, что нужно, можно после автоматической раскладки дополнительно приписать в OnUpdateObjects 
      Код для работы примерно такой
      procedure TForm1.FormCreate(Sender: TObject); begin data:= TMyDataList.CreateFromFile(ExePath()+'data.json'); // загрузка в модель данных Adapter := TMyAdapter.Create(lvWallets, data.Items, ExePath()+'pattern.json'); // создание адаптера и загрузка шаблона Adapter.Pattern.SetupListView(lvWallets); // задать отступы и разную мелочь Adapter.ResetView(); // здесь в цикле из модели данных создается нужное количество итемов ListView end; procedure TForm1.lvWalletsUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin Adapter.SetupContent(AItem); // загрузить текст, картинки и другое содержимое в элементы итема Adapter.Pattern.DoLayout(AItem); // поправить раскладку в соответствии с содержимым элементов итема end; Для использования кроме стандартных - текст, картинка, кнопка - создано несколько дополнительных элементов итема - прямоугольник, круг, уголок, линия.
      Отличие от ModernLV - , 
      1) все происходит без правки системных файлов
      2) пока нет колонок и других особых изысков.
      На результат работы смотреть тут. Исходники пока не причесаны, будут чуть позже
       
      ListViewFramework.7z
    • От Dmitry Stolyarov
      Добрый день, подскажите, пжл, новичку...
      Есть ListView и ImageList с двумя картинками. В ListView Item добавлен Image. ListView заполняю из БД и пытаюсь вывести картинку в зависимости от значения поля БД, но в независимости от значения БД выводится одна и та же картинка.. Такое нельзя провернуть?
      procedure TForm6.ListViewNAMEUpdateObjects(const Sender: TObject;
        const AItem: TListViewItem);
        var IItem:TListItemImage;
      begin
       IItem:= aItem.Objects.FindDrawable('Image4') as TListItemImage;
      if (IItem<>nil) then
      with FDQuery1 do
       begin
       First;
       while not Eof do
        begin
         if FDQuery1FK_PRICE.AsInteger = 1 then begin
          IItem.ImageIndex:=1
         end else
            begin
               IItem.OwnsBitmap := True;
           IItem.ImageIndex:=0;
            end;
         Next;
        end;
       end;
      end;
       
    • От gresaggr
      Добрый день.
      Как под FMX в ListView сделать подчеркивание Detail в рантайме?
      Пытался делать так:
      LV.ItemAppearanceObjects.ItemObjects.Detail.Font.Style := [TFontStyle.fsUnderline]
      но не срабатывает.
      P.S. Возможно это применить не ко всем строкам, а только к некоторым?
    • От ice donkey
      Заполняю ListView в рантайме:
       
       
      LiveBindings не подходит, поэтому есть вопрос: а как задать фиксированный заголовок - чтобы в списке все Items, начинающиеся с буквы А были как бы объединены под одним заголовком А? Который  в свою очередь смещался бы только заголовком Б (с Items, которые на букву Б) и так далее.
       
      Пример:
       
    • От Olexander Sagaydak
      Летом 2016 вопрос отображения объектов в ListView при создании Items уже обсуждался. Хочу ещё раз обсудить этот вопрос. А именно:
      Простой код 
      ListViewItem := ListView.Items.Add;
      ListViewItem.Objects.AccessoryObject.Visible := false; (или true, не важно)
      вторая строка не работает если до выполнения, ListView ни одного раза не отображался. Если же отображался хотя бы один раз - всё нормально.
      В предыдущих обсуждениях Krapotkin рекомендовал Resize и OnUpdateObjects. Если нет идей проще, то, конечно, воспользуюсь.  
       
    • От x11
      Не понять, ни в справке найти, ни примеров, как получить текст из header.
      Как получить текст из какого-то элемента, есть пример:
      lvContacts.Items[li.Index].Objects.FindObjectT<TListItemText>('textTel').Text; а для заголовка ил подвала не нахожу примеров
    • От Erlan_krg
      Всем привет! Встретился с одной проблемой. Удаляю Item у ListView по нажатию кнопки, которая находится на ListViewItem
      procedure TfmAppointment.lvSelectedServicesButtonClick(const Sender: TObject;
        const AItem: TListItem; const AObject: TListItemSimpleControl);
      begin
          lvSelectedServices.BeginUpdate;
          if lvSelectedServices.ItemCount > 0 then
              lvSelectedServices.Items.Delete(AItem.Index);
          lvSelectedServices.EndUpdate;
      end;
      итем удаляется, но потом выскакивает ошибка Access violation at address 60BCB318 и то се бо се
       
      у ListView ItemAppearance выставлен на DynamicAppearance
      помимо родного объекта Text добавил еще один объект Text и кнопку
       
      но фишка в чем, если убрать дополнительный объект Text с ListWiewItem и удалить итем то ошибка не выскакивает)
       
      что за прикол?
    • От sinuke
      Доброго дня, форумчане
      Возникла проблема с тем, чтобы поменять местами два итема в ListView. ListView.Items не имеет метода Exchange, сами итемы не имеют метода Assign чтобы можно было один итем клонировать в другой / удалить / вставить
      У кого какие мысли? Как реализовать?
      Delphi 10.2 Tokyo
       
    • От x11
      Не могу понять, как записать текст в Footer text
       
       

    • От Mars M
      Загружаю большой список в ListView, время загрузки где то 5-7 секунд.
      Это много, по этому переделал что бы список загружался динамически, как к концу пролистывается, подгружаются новые данные.
      Все бы хорошо, но вот ScrollBar при загрузке новых данных меняет размер и позицию. 
      Это не очень нравиться
      Можно как то заранее настроить его размер под конечное число итемов?
      Или может как то по другому сделать.
  • Последние посетители   0 пользователей онлайн

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

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