Тема: Як додати компоненти в ListView?

Такі як кнопки, випадаючі списки та все інше.

2

Re: Як додати компоненти в ListView?

Ніяк. TListView -- це обгортка над системним контролом, що має конкретний функціонал. Можна використати TClientDataSet в автономному режимі та TDBGrid. Грід в залежності від типу полів може містити комбобокси, чекбокси, та кнопки.

Ще недавно додався новий компонент TControlList, що може містити звичайні компоненти і автоматично керувати їхнім життєвим циклом.

Подякували: leofun01, Torbins2

3 Востаннє редагувалося Droid 77 (15.08.2022 19:12:44)

Re: Як додати компоненти в ListView?

Хіба гріди не для роботи з базами даних?
Там же саме ім'я говорить за себе.
DB - DataBase

Навряд TDBGrid для обробки запитів випадаючого списку.
І тим більш TClientDataSet.

P. S.
Підв'язуйте з хибними курсами. Йдіть навчатися в універ...

4 Востаннє редагувалося Droid 77 (15.08.2022 19:17:38)

Re: Як додати компоненти в ListView?

quwy написав:

Ніяк. TListView -- це обгортка над системним контролом, що має конкретний функціонал

Що ні як? Що мали на увазі?
Колинебуть писали свій Т - компонент?

5

Re: Як додати компоненти в ListView?

В інтернетах знайшов що можна створити власний клас похідний від ListItem і в цьому класі якось щось самому відмальовувати. Так можна? Чи все так ніяк?

6

Re: Як додати компоненти в ListView?

Droid 77 написав:

Підв'язуйте з хибними курсами. Йдіть навчатися в універ...

Це ви йдіть, будь ласка. Але не в універ.

Подякували: Torbins1

7

Re: Як додати компоненти в ListView?

javascriptIsLife написав:

В інтернетах знайшов що можна створити власний клас похідний від ListItem і в цьому класі якось щось самому відмальовувати. Так можна? Чи все так ніяк?

Відмалювати можна що завгодно. Але чи готові ви попіксельно відмальовувати, наприклад, комбобокс? А якщо готові, то навіщо вам той ListView, коли все можна просто намалювати на канві власноруч.

ListView -- це системний контрол для відображення списків об'єктів. Перш за все -- файлів. Ви бачите його на своєму робочому столі, в стандартних діалогах відкриття/збереження файлів, він є основою класичного windows explorer. Це і є його призначення і радикально його поведінку змінити не можна, бо це об'єкт ядра Windows, а не просто компонент Delphi. Його малює операційна система, а не код у Vcl.ComCtrls.pas

Ви можете перехопити вивід елементу на екран та домалювати там що завгодно. Але якщо ви захочете добавити на нього стандартну кнопку, то тут одразу купа проблем:
1. TListView не може бути парентом для інших контролів, тому розміщувати кнопки доведеться просто поверх списку на тому ж паренті, що і він сам. Обійти це можна за допомогою прямого звернення до WinAPI, але це мало що дасть.
2. Прокруткою всього навішеного доведеться займатись власноруч, список працює лише зі своїми елементами, а ваші кнопки, нагадую, навіть не можуть лежати на ньому.
3. Слідкувати за створенням чи видаленням таких контролів теж доведеться руками, список за вас це ніяк не зробить.

Тому дуже рекомендую TContolList. Він дозволяє накидати у якості елемента списку майже що завгодно і буде автоматично створювати, видаляти, та скролити ці елементи. Якщо працювали з FastReport чи аналогами, то дуже схоже.

І ще раз про DBGrid. Це теж компонент, що вміє відображати список рядків. Сам список може бути у автономному датасеті, без жодної бази даних, чи чогось подібного. Але на відміну від TListView, він, наприклад, автоматично відображає комбобокс (і повністю керує ним у бекграунді) для лукапного поля, чи якщо його просто попросити так зробити. Це теж варіант, тим більше розширені варіанти такого гріда вміють відображати також зображення, і майже що завгодно.

Подякували: leofun01, Torbins, javascriptIsLife3

8

Re: Як додати компоненти в ListView?

quwy написав:

Ще недавно додався новий компонент TControlList, що може містити звичайні компоненти і автоматично керувати їхнім життєвим циклом.

В старіших версіях делфі є подібний компонент, який називається TDBCtrlGrid. Але на відміну від TControlList він має проблеми з швидкістю роботи на великих списках, тому більше ста елементів у нього пхати не варто. Ну і, як можна здогадатися з назви, йому також потрібне зовнішнє сховище даних. Це може бути TClientDataSet або TFDMemTable в автономному режимі.

Подякували: quwy, javascriptIsLife2