Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Проблемы с Virtual TreeView, Статью читал :) 
:(
    Опции темы
MegaVolt
Дата 23.1.2007, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Есть пару вопросов:

1. NodeDataSize обязательно фиксированного размера? Или можно делать записи разного размера? У меня для экономии памяти строчки задаются рзаного размера.

2. Можно ли выделить пунктирным прямоугольником фокуса сразу всю строку а не только одну ячейку. Т.е. у меня сейчас выделена вся строка а прямоугольник фокуса выделяет не строку а ячейку smile

3. Можно ли следать как в Vitrual ListVIew чтобы на добавление ячеек не требовалось место? Если мне иерархия  дерева не нужна то можно ли на этом сэкономить?

4. Можно ли рисовать GridLines дальше чем у меня есть колонки?

5. Можно ли при перетаскивании ползунка прокрутки получить такой эффек как и в ListView (прокрутка только на целое число строк)

6. К сожалению у меня очень плохо с юридическим английским. Могу ли я исспользовать VT в коммерческой программе и что для этого нужно?


M
Girder
Одна тема - один вопрос!
PS: Тема закрыта!

PM MAIL   Вверх
aktuba
Дата 23.1.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

1. NodeDataSize обязательно фиксированного размера? Или можно делать записи разного размера? У меня для экономии памяти строчки задаются рзаного размера.


Насколько я знаю, в OnGetNodeDataSize можно возвращать размер записи для каждого узла, но сам не использовал такого.

Цитата

3. Можно ли следать как в Vitrual ListVIew чтобы на добавление ячеек не требовалось место? Если мне иерархия  дерева не нужна то можно ли на этом сэкономить?


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

Цитата

4. Можно ли рисовать GridLines дальше чем у меня есть колонки?


Тоже интересует  smile 




--------------------
user posted image
PM MAIL WWW Skype   Вверх
Bose
Дата 23.1.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



1. Вроде можно разные. Смотри событие OnGetNodeDatasize
2. Именно для фокуса - нет(насколько я знаю). Выделение - это одно, фокус - это другое. (и то и то можно спрятать: TreeOptions->PaintOptions HideFocusRect и HideSelection)
3. Не понял вопроса. Можно не рисовать структуру дерева. В TreeOptions->PaintOptions убрать галочки с ShowRoot и ShowTreeLines
4, 5. не знаю
6. Да. Можно использовать без ограничений. 
PM MAIL WWW Skype   Вверх
MegaVolt
Дата 23.1.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Цитата

3. Не понял вопроса.

Попробую пояснить. В VT физически данные не хранятся в нём хранится только структура дерева и ссылка на данные. Если я его хочу исспользовать только для отображения списка строк без какой либо иерархии то хранить информацию о иерархии нет необходимости. В ListView это сделано так: я загружаю просто количество строк и в событии OnData подставляю данные. Т.е. сам компонент занимается только отрисовкой и никакой лишней информации кроме положения ползунка прокрутки не хранит. Можно ли в VT получить такой же эффект? Или если нельзя какой минимальный объём памяти будет занимать одна ячейка дополнительно к моим данным?
PM MAIL   Вверх
aktuba
Дата 23.1.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

Попробую пояснить. В VT физически данные не хранятся в нём хранится только структура дерева и ссылка на данные. Если я его хочу исспользовать только для отображения списка строк без какой либо иерархии то хранить информацию о иерархии нет необходимости. В ListView это сделано так: я загружаю просто количество строк и в событии OnData подставляю данные. Т.е. сам компонент занимается только отрисовкой и никакой лишней информации кроме положения ползунка прокрутки не хранит. Можно ли в VT получить такой же эффект? Или если нельзя какой минимальный объём памяти будет занимать одна ячейка дополнительно к моим данным?


Нисколько. В RootNodeCount ставишь необходимое количество строк, а в обработчике OnGetText проставляешь значения. Это как вариант...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MegaVolt
Дата 23.1.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Цитата(aktuba @  23.1.2007,  18:51 Найти цитируемый пост)
В RootNodeCount ставишь необходимое количество строк, а в обработчике OnGetText проставляешь значения. Это как вариант...
Пробовал, время и память отнимает smile
PM MAIL   Вверх
aktuba
Дата 23.1.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

Пробовал, время и память отнимает smile 


Т.е.??? Код в студию...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MegaVolt
Дата 23.1.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Какой код?
Ставлю: RootNodeCount=1000000 в инспекторе и компилирую в результате запуск занимает пару секунд и при этом отнимается порядка 57 мег памяти. Своего кода 0. Т.е. только настройка свойств компонента. Получается на каждую строчку тратится 57 байт что не есть здорово.
PM MAIL   Вверх
Bose
Дата 23.1.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(MegaVolt @  23.1.2007,  18:44 Найти цитируемый пост)
Т.е. сам компонент занимается только отрисовкой и никакой лишней информации кроме положения ползунка прокрутки не хранит. Можно ли в VT получить такой же эффект? Или если нельзя какой минимальный объём памяти будет занимать одна ячейка дополнительно к моим данным?

Virtual TreeView - очень гибкий компонент, но не настолько же =) В конце-концов, это именно дерево, а не Listview. Всё что могу посоветовать: попробуй посмотри в исходниках.  smile 

А вообще VirtualTreeView к памяти относится довольно экономно. Не вижу особого смысла в такой оптимизации. 
PM MAIL WWW Skype   Вверх
aktuba
Дата 23.1.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

Какой код?
Ставлю: RootNodeCount=1000000 в инспекторе и компилирую в результате запуск занимает пару секунд и при этом отнимается порядка 57 мег памяти. Своего кода 0. Т.е. только настройка свойств компонента. Получается на каждую строчку тратится 57 байт что не есть здорово.


VT все-же дерево и для хранения структуры память необходима. НО, если сравнивать с ListView - VT выигрывает по всем пунктам. Сейчас проверил и получилось следующее:

VirtualTreeView - 2-3 секунды/57Мб на 1 000 000 записей
ListView             - 50-60 секунд/93Мб на 1 000 000 записей

Время дано с учетом времени создания записей!!!

Вот и сравнивай  smile 


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MegaVolt
Дата 23.1.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Цитата(Bose @  23.1.2007,  19:42 Найти цитируемый пост)
сё что могу посоветовать: попробуй посмотри в исходниках.
smile Ясно. Я просто думал что может есть какая птичка smile

Цитата(Bose @  23.1.2007,  19:42 Найти цитируемый пост)
Не вижу особого смысла в такой оптимизации. 
Да жалко памяти на большом количестве строк. Если сам текст строки примерно равен этому объёму то получается двойное увеличение исспользования памяти.

Цитата(aktuba @  23.1.2007,  19:59 Найти цитируемый пост)
ListView             - 50-60 секунд/93Мб на 1 000 000 записей
 smile)) В обычном режиме да. А если поставить OwnerData:=true; и определить обработчик для OnData то то же самое действие потребует время незаметное на глаз smile

PM MAIL   Вверх
aktuba
Дата 23.1.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

В обычном режиме да. А если поставить OwnerData:=true; и определить обработчик для OnData то то же самое действие потребует время незаметное на глаз smile


Незаметно говоришь?  smile Сам то запускал такой пример? Попробуй - потом отпиши...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Bose
Дата 23.1.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(MegaVolt @  23.1.2007,  20:15 Найти цитируемый пост)
Да жалко памяти на большом количестве строк. Если сам текст строки примерно равен этому объёму то получается двойное увеличение исспользования памят

Для работы с таким количеством строк рекомендую переходить на использование баз данных! smile 
PM MAIL WWW Skype   Вверх
MegaVolt
Дата 23.1.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Цитата(aktuba @  23.1.2007,  20:25 Найти цитируемый пост)
Сам то запускал такой пример
А то. Режим vsReport
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  with ListView1 do
    begin
      OwnerData:=true;
      Items.Count:=1000000;
   end;
end;

procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
  Item.Caption:=    '111111111111111111111111111111111111'+IntToStr(Item.Index);
  Item.SubItems.Add('A22222222222222222222222222222222222'+IntToStr(Item.Index));
  Item.SubItems.Add('333333333333333333333333333333333333'+IntToStr(Item.Index));
end;




Цитата(Bose @  23.1.2007,  20:25 Найти цитируемый пост)
Для работы с таким количеством строк рекомендую переходить на использование баз данных!
Так это и есть результат выбора из импровизированной базы smile Пользователи извращаются и тестят мою прогу по максимуму выбирая все строчки. Пока работало smile Вот при переходе на VT хотелось бы сохранить прежние требования к памяти smile

PM MAIL   Вверх
aktuba
Дата 23.1.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата

А то. Режим vsReport
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  with ListView1 do
    begin
      OwnerData:=true;
      Items.Count:=1000000;
   end;
end;
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
  Item.Caption:=    '111111111111111111111111111111111111'+IntToStr(Item.Index);
  Item.SubItems.Add('A22222222222222222222222222222222222'+IntToStr(Item.Index));
  Item.SubItems.Add('333333333333333333333333333333333333'+IntToStr(Item.Index));
end;
    


У меня вообще не отобразило ни одной строки, правда я и не разбирался. Не использую ListView... Но форма действительно появилась быстро. И памяти занимает 3Мб.

Но, тебе лучше использовать ListView, т.к., если я правильно понял, ты хранишь строки. А VT позволяет хранить любые данные. Это + хранение структуры и занимает память.

Есть еще такой момент. Все данные у тебя хранятся в самом ListView, а в VT хранятся отдельно. VT используется для отображения данных, а, у тебя, ListView и для отображения и для хранения...

P.S.: не корректно сравнивать список с деревом, у них разные предназначения.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.