Перейти к содержанию
  • 0
ENERGY

Посоветуйте, сделать TGrid из TListView. Как добавить кнопку-колонку в ListView

Вопросы

Нужно сделать компонент TGrid. Стандартный Grid не подходит, потому что нужно чтобы строки (raws) были разной высоты, а также чтобы была возможность соединять (сливать) ячейки.

Я решил сделать его на основе TListView и его DynamicAppearance. Использовать кастомные объекты, отнаследованные от TListItemObject + возможность рисовать на Canvas каждого ListItem, например прямоугольники.

Т.к. колонки он не поддерживает, есть идея использовать THeader и подстраивать их под размер своих колонок. Также важно быстродействие компонента.

Как вы думаете есть ли в этом смысл?

Возможно кто-то уже занимался подобным, и может что-нибудь посоветовать.

Спасибо.

 

Отредактировал ENERGY

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


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

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

  • 0

колонок не существует

делайте нужное количество текстовых элементов

я уже много раз приводил ссылку на видео

и есть тут пример создания компонентов на разновысоких итемах в ListView

и даже дополнительный компонент от @Равиль Зарипов (ZuBy)

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


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

Пока без редактирования. 

@krapotkin Спасибо, я это все уже смотрел, а компонент Равиля использую в своих программах. Тут больше вопрос стоит ли это делать на основе TLIstView ?

 

Пока с отрисовкой и позиционированием объектов на Item (разбивку на колонки) все понятно, я уже это делал когда-то.

Вопрос как нужно делать колонки, точнее кнопки колонок. Как сделать так чтобы они не скролились вместе с содержимым ListView? 

1. добавить SpeedButton в сам ListView и каким то образом подвинуть вниз весь контент на высоту кнопки.

2. Или есть ли возможность нарисовать эти кнопки над компонентом из класса компонента? Я вот не знаю, но догадываюсь что есть. Может @Brovin Yaroslav  сможет подсказать? Мне кажется второй вариант можно легко реализовать, вот только не знаю как пока.

Спасибо.

Отредактировал ENERGY

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


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

Возможнос, я не в теме, но у меня вопрос. А TGrid чем не устраивает? Хотите свой вариант расположения контролов в ячейке сделать?

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


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

нужно чтобы строки (raws) были разной высоты

Я так понимаю нужно реализовать Ад перфекциониста.
25.jpg.46ba8bffb2c628ea79584aab0e73ec11.jpg

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


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

Возможнос, я не в теме, но у меня вопрос. А TGrid чем не устраивает? Хотите свой вариант расположения контролов в ячейке сделать?

Я написал в первом посте основную причину. И вообще это желание заказчика.

Ярослав, подскажите пожалуйста что можно придумать с кнопками-колонками, можно ли их отрисовать над компонентом (сверху), и управлять ими из класса компонента? Хотя бы примерно намекните как это лучше сделать? У меня просто опыта в разработке визуальных FMX никакого, я делал только визуальные компоненты VCL и KOL MCK.

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


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

из описания непонятно, как это должно выглядеть

давайте картинку

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


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

@krapotkin

Примерно так:grid.thumb.png.93de8b20cf45d1be7141db602827495c.png

Вопрос в том, возможно ли из класса компонента, управлять кнопками? Напр. позиционировать их над ListView, менять их ширину итп ?

Конечно лучше их будет перекинуть внутрь ListView, но я не знаю как сместить все ListItems вниз, плюс они же будут скролиться что нежелательно.  Вот и спрашиваю как лучше сделать.

 

Отредактировал ENERGY

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


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

Сделайте обычными SpeedButton над ListView.

И управляйте по событиям как требуется...

Дешево, удобно и практично будет! :)

Отредактировал wamaco

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


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

в МодернЛВ есть свойства для отступов. Можно задать верхний отступ для итемов, чтобы в эту область всунуть те же SpeedButton

592fd979668c5_(9).thumb.png.f91f24c847e907b89d83c76534598e1f.png

Отредактировал sinuke

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


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

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

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

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

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

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

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

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

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


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

    • От AlexM
      Win10
      Delphi 10.3.1
      необходимо реализовать редактирования ячейки TGrid, на котором есть LiveBindings
      нужна маска редактирования и шрифт

      пробовал OnCreateCustomEditor
      procedure TForm1.Grid1CreateCustomEditor(Sender: TObject;   const Column: TColumn; var Control: TStyledControl); var   tmpEdit: TEdit; begin   tmpEdit := TEdit.Create(self);   tmpEdit.MaxLength := 3;   tmpEdit.Font.Style := tmpEdit.Font.Style + [TFontStyle.fsUnderline];   Control := tmpEdit; end; MaxLength работает ок, но хотелось бы всё-таки маску
      жирный шрифт не устанавливается
      введенное значение не сохраняется, по окончании редактирования восстанавливается старое значение, даже если tmpEdit в LiveBindings привязать к LinkFillControlToField
    • От Morfi
      Доброго времени суток.
      Нашел проблему при написании кастомного грида, который наследуется от TCustomGrid:
      При использовании LiveBindings  между кастомным гридом и набором данных, после закрытия среды вываливается AV:

       

       
      Подскажите, что я упустил?
       
      Минимальный код кастомного грида:
       
    • От SIARHEI RAHOUSKI
      Здравствуйте, у меня возник вопрос Как базу данных подключить к TGrid? Я использую Delphi XE3 и База данных Accsess: ADOConnection + ADOQuery + DataSource. И вот как отобразить в TGrid Таблицу бд ?
    • От Виталий Иванов
      Есть такая идея. 
      Загружаю в TListView много элементов (от 500 до 1000 может и более) ситуация вынуждает грузить именно столько . Так вот когда начинаю создавать их кастомно после создания приходится вызвать oItem.Adapter.ResetView(oItem) (Если этого не делать то не корректно рассчитывается высота и ещё пару багов )  что соответсвенно вызывает подвисание интерфейса на Windows все круто это не так в глаза бросается, а на Android печалька форма зависает от 10 до 30 секунд 
      Так вот сам вопрос можно ли как это сделать в отдельном потоке что бы пользователю показывать какой нибудь Waiter. Или может кто как по другому предложит реализовать ? 
      Смотрел в сторону динамической подгрузки итемов но хотелось бы что и его поиск работал . 
    • От niddarun
      На форме стоит tgrid при прокрутке есть заддержка. не большая но все равно не приянто. программа под windows. И еще при прокрутке идет нагрузка на процессор. 
    • От Alex Bozhko
      Вопрос из серии "чего-то странного хочется".
      Предположим, я хочу написать собственный ListView. Если я наследую от TListView, то всё нормально. Я его регистрирую с помощью процедуры Register
      Примерно так:
      procedure Register; begin RegisterComponents('<Моя вкладка>', [TМойListView]); end; И всё работает.
      Но, как показывает практика, в том числе пример Равиля Зарипова (https://github.com/rzaripov1990/ModernListView) для того, что бы написать полноценный ListView, наследоваться надо от предков TListView, едва ли не от TStyledControl.
      Дальше возникает вопрос. Где и как правильно регистрировать вновь созданный компонент?
      Если зарегистрировать компонент с помощью процедуры Register, то при размещении компонента на форме в окне Structure к вновь созданному компоненту не привязывается ItemAppearence.

       
      Да и IDE падает.
      Прилагаю файл с кастомным ListView. Сделан по аналогии с оригинальным, изменены только названия.
       
       
      My.FMX.ListView.zip
    • От Виталий Иванов
      Вопрос к экспертам
      Возникла необходимость и хотел спросить можно ли как-то сделать TlistViewItem  прозрачным, а то получается что сам TlistView может быть прозрачным а его итем нет . Это как-то же делаться у TListBoxItem. 
      Заранее огромное спасибо.
    • От x11
      ListView в режиме appearance.
      Добавил пару TListItemGlyphButton, указал в свойстве ButtonType - CheckBox. Но при работе приложения - пустота.
      Другие типы кнопок тоже не отображает.
      ЧЯДНТ.
    • От x11
      По совету krapotkin`a
      http://fire-monkey.ru/topic/4595-listview-скрывает-повторяющийся-текст-заголовков/?do=findComment&comment=29209
       
      Забросил LiveBinding при заполнении TListView и начал заполнять ручками.
      Почти всё хорошо за исключением загрузки картинки из базы.
      При использовании LiveBinding картинка грузилась, а теперь просто пустота.
      На Windows картинки грузятся и отображаются, а на Андроиде не хотят.
       
      Вот часть кода загрузки
      Var stream: TBlobStream; ... begin .... lv.BeginUpdate; try lv.Items.Clear; qObjects2.close; qObjects2.Open; while not qObjects2.Eof do begin item := lv.Items.Add; item.Data[sItemId] := qObjects2id.AsString; item.Data[sItemPrice] := qObjects2price.AsString; item.Data[sItemType] := qObjects2type_name.Value; ... ... ... ListItemImage := Item.Objects.FindObjectT<TListItemImage>(sItemImg); stream := TBlobStream.Create(qObjects2img, bmRead); try if stream.Size <= 0 then ListItemImage.ImageIndex := 0 else ListItemImage.Bitmap := TBitmap.CreateFromStream(stream); finally stream.Free; end;  
      К ListView прикреплен список картинок, где есть картинка-пустышка, которая грузится, если у записи нет картинки.
      вот этой строкой ListItemImage.ImageIndex := 0
      картинки-пустышки нормально отображаются и на Андроид-устройстве в том числе.
      Ошибок нет, а просто пустой TListItemImage там, где должна быть картинка.
      Может, я какое-то свойство забыл включить у TListItemImage?
      При отладке видно, что картинка загружается из базы.
       
       
    • От x11
      Сделал такой эксперимент в событии OnUpdateObjects
      if AItem.Purpose in [TListItemPurpose.Header] then Memo1.Lines.Add(AItem.Text);  
      И в memo загрузилось в два раза больше строк, чем элементов списка.
      Это нормально, так и должно быть?
  • Последние посетители   0 пользователей онлайн

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

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