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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Virtual Treeview] Встраиваемые компоненты, Возможно ли встроить некий UserControl? 
V
    Опции темы
NaumLeNet
Дата 17.11.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Возможно ли использовать в качестве контента для ноды некий контрол? К примеру TFrame?

Стоит задача визуализации очень большого списка записей (+ связь с БД) в виде неких панелей. Реализовать с помощью VTW - это бы взяло половину траблов на себя. Возможно ли? Или лучше писать свой виртуальный грид?
PM MAIL ICQ   Вверх
Quadr0
Дата 17.11.2006, 23:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered












M
Girder
Ента ссылка - есть в низу;-)

...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 01:56
  Вверх
NaumLeNet
Дата 18.11.2006, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Но тут речь идет о другом, насколько я понимаю. Editor визуализируется непосредственно в момент вызова, т.е. когда пользователь начинает редактировать ноду. В вашем примере это сделано в виде некоего универсального интерпритатора данных в наиболее удобном для редактировании формате. Кликнули - отредактировали в спец. редакторе - перечитали результат.

Мне же необходимо визуализировать данные в виртуальном гриде (VTW) не в виде plain text, а в виде особых UserControl'ов (Frames) в качестве ноды. 

Вещи похожие, но несколько разные. Тут я виже только одно решение - если бы была возможность едитор держать все время показанным (какой-нить аналог AlwaysShowEditor). Но все равно ряд проблем возникает - OnGetNode -> я должен вызвать метод спец. едитора (до которого надо попроще добраться), который бы синхронизировал контент с БД.

--
По сути хотелось бы максимально быстро и простро задействовать "виртуальную идеологию" VTW с максимально гибким контентом.

Если это все таки невозможно в рамках VTW, то что вы посоветуете?

Это сообщение отредактировал(а) NaumLeNet - 18.11.2006, 02:32
PM MAIL ICQ   Вверх
Bose
Дата 23.11.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



NaumLeNet, TVirtualDrawTree тебе в помощь smile 
И рисуй в любом виде. 


Или как вариант ещё можно посмотреть дополнительные компоненты и примеры на сайте Soft-Gems. Насколько я помню там был компонент Virtual Button Treeview - дерево, с кнопкой в каждой ячейке. скачать Virtual Button Treeview
PM MAIL WWW Skype   Вверх
NaumLeNet
Дата 23.11.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Bose
Отрисовать то, в принципе, не проблема =) Но ведь дело не только в отрисовке, а в реакции расположенных в гриде контролов на действия пользователей. Идеальный вариант расположение TFrame в ячейках грида.

За Virtual Button Treeview пример сенькс, сейчас посмотрю, может решит мою проблему.

--
Проблемы не решает. Реализация в лоб - отрисовка кнопки, контроль клика, перерисовка и прочее. Рендерить и контролить динамический контент на фрейме таким макаром, имхо, извращение. Как быть?...

Это сообщение отредактировал(а) NaumLeNet - 23.11.2006, 13:07
PM MAIL ICQ   Вверх
Bose
Дата 23.11.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(NaumLeNet @  23.11.2006,  12:53 Найти цитируемый пост)
Рендерить и контролить динамический контент на фрейме таким макаром, имхо, извращение. Как быть?...

Моё сугубо персональное мнение в том, что создавать по фрейму для каждой ячейки, каждого столбца*каждого узла - это уже извращение smile И потребление памяти при этом вырастет, и перерисовка каждого фрейма будет занимать какое-то время... smile 

Поэтому вариант с собственноручной прорисовкой мне кажется более простым smile...


NaumLeNet, а почему бы не рисовать эти фреймы самому?...  В OnInitNode создавать нужные фреймы, а в OnDraw или в AfterCellPaint, корректировать координаты и размеры уже созданных фреймов... только вот по-моему тормозииить это будеееет.... 
PM MAIL WWW Skype   Вверх
NaumLeNet
Дата 23.11.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот в тормозах и проблема )

Задача стоит простая - необходим обычный лист интерактивных элементов с разного рода контентом. Первым делом пробовал ScrollBox + TPanels (+ создание на них кучи контролов, типа лейблов / имаг и прочего). Тормозаааа...

Потом в VS2005, в Syncfusion компонентах увидел реализацию грида, где каждая ячейка была UserControl'ом (+ DataBinding и прочие фишки). Портировать код просто нереально, слишком на дотнете завернуто. Там 50.000 юзерконтролов в гриде инициализировались ~1.5-2 сек(!) и работали быстро (явно грид виртуальный).
PM MAIL ICQ   Вверх
Bose
Дата 23.11.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Всё, что могу посоветовать, это всё же использовать TvirtualDrawTree. Написать процедуру которая будет рендерить картинку фрейма в зависимости от данных, и выводить в дерево эту картинку. А при редактировании, уже подставлять вместо картинки реальный фрейм. Для увеличения скорости, отрендеренные картинки можно кэшировать, т.е. хранить в памяти копии всех фреймов, и перерисовывать их только, когда изменятся данные.



PM MAIL WWW Skype   Вверх
NaumLeNet
Дата 24.11.2006, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я понимаю, о чем вы. Давайте еще разок -- отрендерить не проблема, организовать кэширование тоже. Редактировать не надо. А вот как внести интерактивность? ) На фрейме есть гиперссылки, есть пиктограммы (с обработкой MouseEnter/Leave) и прочие элементы.
PM MAIL ICQ   Вверх
Bose
Дата 24.11.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(NaumLeNet @  24.11.2006,  03:32 Найти цитируемый пост)
 А вот как внести интерактивность? ) На фрейме есть гиперссылки, есть пиктограммы (с обработкой MouseEnter/Leave) и прочие элементы.

Либо обрабатывай MouseMove в дереве, либо выводи на экран все элементы, и пусть они сами обрабатывают эти события smile 
NaumLeNet, по-моему, поставленная задача не имеет быстроработающего тривиального решения. Готового рецепта нет. Да и по-моему, это уже слишком: интерактивные элементы в виртуальном дереве smile Имхо smile 
PM MAIL WWW Skype   Вверх
NaumLeNet
Дата 24.11.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Короче решил проблему ) Жестоко, но решил. На базе VTV:

OnInitNode: создание фрейма, внедрение его в VTV, data binding
OnAfterCellPaint: появление фрейма, позиционирование его по Cell Rect'у.
OnFreeNode: удаление фрейма

TNodeData имеет указатель на связанный фрейм.

Есть ряд проблем и нюансов, но думаю решу. 

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

В общем всем спасибо. Вопрос закрыт.
PM MAIL ICQ   Вверх
tauren81
Дата 28.7.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А можно ли вставлять контролы не стандартного набора, а к примеру TRichViewEdit (как то так), проблема в том что он показывается во время инициализации редактирования, но прокрутка теряется, и что хуже после закрытия редактиорвания происходит не корректаня обработка фокуса, когда элемент родитель уже убит а сам контрол обрабатывается родными модулями, та же фигня с компонентами dxTreeList (хотел попуп едит затолкать). Неужто только  придется использовать обычные компонеты?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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