![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| MegaVolt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Есть пару вопросов:
1. NodeDataSize обязательно фиксированного размера? Или можно делать записи разного размера? У меня для экономии памяти строчки задаются рзаного размера. 2. Можно ли выделить пунктирным прямоугольником фокуса сразу всю строку а не только одну ячейку. Т.е. у меня сейчас выделена вся строка а прямоугольник фокуса выделяет не строку а ячейку 3. Можно ли следать как в Vitrual ListVIew чтобы на добавление ячеек не требовалось место? Если мне иерархия дерева не нужна то можно ли на этом сэкономить? 4. Можно ли рисовать GridLines дальше чем у меня есть колонки? 5. Можно ли при перетаскивании ползунка прокрутки получить такой эффек как и в ListView (прокрутка только на целое число строк) 6. К сожалению у меня очень плохо с юридическим английским. Могу ли я исспользовать VT в коммерческой программе и что для этого нужно?
|
|||
|
||||
| aktuba |
|
||||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Насколько я знаю, в OnGetNodeDataSize можно возвращать размер записи для каждого узла, но сам не использовал такого.
Не понял вопроса...
Тоже интересует -------------------- ![]() |
||||||
|
|||||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
1. Вроде можно разные. Смотри событие OnGetNodeDatasize
2. Именно для фокуса - нет(насколько я знаю). Выделение - это одно, фокус - это другое. (и то и то можно спрятать: TreeOptions->PaintOptions HideFocusRect и HideSelection) 3. Не понял вопроса. Можно не рисовать структуру дерева. В TreeOptions->PaintOptions убрать галочки с ShowRoot и ShowTreeLines 4, 5. не знаю 6. Да. Можно использовать без ограничений. |
|||
|
||||
| MegaVolt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Попробую пояснить. В VT физически данные не хранятся в нём хранится только структура дерева и ссылка на данные. Если я его хочу исспользовать только для отображения списка строк без какой либо иерархии то хранить информацию о иерархии нет необходимости. В ListView это сделано так: я загружаю просто количество строк и в событии OnData подставляю данные. Т.е. сам компонент занимается только отрисовкой и никакой лишней информации кроме положения ползунка прокрутки не хранит. Можно ли в VT получить такой же эффект? Или если нельзя какой минимальный объём памяти будет занимать одна ячейка дополнительно к моим данным? |
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Нисколько. В RootNodeCount ставишь необходимое количество строк, а в обработчике OnGetText проставляешь значения. Это как вариант... -------------------- ![]() |
|||
|
||||
| MegaVolt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
||||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Т.е.??? Код в студию... -------------------- ![]() |
|||
|
||||
| MegaVolt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Какой код?
Ставлю: RootNodeCount=1000000 в инспекторе и компилирую в результате запуск занимает пару секунд и при этом отнимается порядка 57 мег памяти. Своего кода 0. Т.е. только настройка свойств компонента. Получается на каждую строчку тратится 57 байт что не есть здорово. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Virtual TreeView - очень гибкий компонент, но не настолько же =) В конце-концов, это именно дерево, а не Listview. Всё что могу посоветовать: попробуй посмотри в исходниках. А вообще VirtualTreeView к памяти относится довольно экономно. Не вижу особого смысла в такой оптимизации. |
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
VT все-же дерево и для хранения структуры память необходима. НО, если сравнивать с ListView - VT выигрывает по всем пунктам. Сейчас проверил и получилось следующее: VirtualTreeView - 2-3 секунды/57Мб на 1 000 000 записей ListView - 50-60 секунд/93Мб на 1 000 000 записей Время дано с учетом времени создания записей!!! Вот и сравнивай -------------------- ![]() |
|||
|
||||
| MegaVolt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Да жалко памяти на большом количестве строк. Если сам текст строки примерно равен этому объёму то получается двойное увеличение исспользования памяти. |
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Незаметно говоришь? -------------------- ![]() |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
||||
|
||||
| MegaVolt |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
А то. Режим vsReport
|
||||
|
|||||
| aktuba |
|
||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
У меня вообще не отобразило ни одной строки, правда я и не разбирался. Не использую ListView... Но форма действительно появилась быстро. И памяти занимает 3Мб. Но, тебе лучше использовать ListView, т.к., если я правильно понял, ты хранишь строки. А VT позволяет хранить любые данные. Это + хранение структуры и занимает память. Есть еще такой момент. Все данные у тебя хранятся в самом ListView, а в VT хранятся отдельно. VT используется для отображения данных, а, у тебя, ListView и для отображения и для хранения... P.S.: не корректно сравнивать список с деревом, у них разные предназначения. -------------------- ![]() |
||||
|
|||||
| Quadr0 |
|
||||||
|
Unregistered |
Фиксированный. И только. В каком смысле строчки разного размера? Используется тип ShortString? Нет, нельзя, но с трудом представляю, зачем это может понадобиться. Прямоугольник фокуса он на то и нужен, чтобы во всей строке активную колонку отображать. Не стоит уродовать интерфейс. Можно сделать это через OwnerDraw, но опять же, зачем?
Не требовалось места где? Сэкономить на чем? Да, можно. См. настройки категории PaintOptions.
Ограничений нет. Никаких. Абсолютно. VT использует в Delphi даже Borland. Это сообщение отредактировал(а) Quadr0 - 23.1.2007, 21:17 |
||||||
|
|||||||
| MegaVolt |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
VT позволяет хранить любые данные согласен. Но в данном примере он никаких данных не хранит. Он просто подставляет строчки по умолчанию для всех колонок. А сами данные с их структурой в данном примере не задействованы
Т.е. SizeOf(x) не соотвествует занимаемому месту в памяти. В памяти структура занимает SizeOf(x)+x.Size. И если VT сам может хранить данные или извлекать их то ему нужно знать истинный размер записи в памяти.
В теме уже я дал развернутое объяснение и эту тему уже страницу обсуждаем. Посмотрел |
||||||||||
|
|||||||||||
| MegaVolt |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Место занимает вот эта структурка:
Для режима отображения одинаковых строк её можно преобразовать к виду
Осталось убедить компонент недостающие поля считать константой Добавлено @ 13:02 Ещё вопрос а можно ли сделать чек бокс в каждой строчке? Т.е. несколько checkBox для одной строки? Это сообщение отредактировал(а) MegaVolt - 24.1.2007, 12:51 |
||||
|
|||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
MegaVolt, мне кажется, что это похоже на стрельбу из пушки по воробьям
Чтобы удовлетворить твоим требованием, в любом случае придётся переписывать какой-то из компонентов, будь это ListView или Virtual tree View.
В каждой строке можно. А несколько CheckBoxов для одной, тоже можно, но уже ручками. п.с. Хотя в этом случае, мне кажется уже уместнее воспользоваться Gridом |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Как вариант, советую взглянуть на готовые ListView. Например Mustang EasyListview. Здесь можно посмотреть скриншоты.
|
|||
|
||||
| MegaVolt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Обязательно посмотрю. |
|||
|
||||
| MegaVolt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 20.10.2006 Репутация: нет Всего: нет |
Посмотрел
NextGrid из их примера добавляет 100000 элементов за 6 секунд EasyListView похоже тоже не позволяет делать CheckBox-ики в каждой колонке. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |