![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
NaumLeNet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2005 Репутация: нет Всего: нет |
Возможно ли использовать в качестве контента для ноды некий контрол? К примеру TFrame?
Стоит задача визуализации очень большого списка записей (+ связь с БД) в виде неких панелей. Реализовать с помощью VTW - это бы взяло половину траблов на себя. Возможно ли? Или лучше писать свой виртуальный грид? |
|||
|
||||
Quadr0 |
|
|||
Unregistered |
... Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 01:56 |
|||
|
||||
NaumLeNet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2005 Репутация: нет Всего: нет |
Я очень благодарен вам за вашу статью, в свое время "привыкал" к VTW именно по ней.
Но тут речь идет о другом, насколько я понимаю. Editor визуализируется непосредственно в момент вызова, т.е. когда пользователь начинает редактировать ноду. В вашем примере это сделано в виде некоего универсального интерпритатора данных в наиболее удобном для редактировании формате. Кликнули - отредактировали в спец. редакторе - перечитали результат. Мне же необходимо визуализировать данные в виртуальном гриде (VTW) не в виде plain text, а в виде особых UserControl'ов (Frames) в качестве ноды. Вещи похожие, но несколько разные. Тут я виже только одно решение - если бы была возможность едитор держать все время показанным (какой-нить аналог AlwaysShowEditor). Но все равно ряд проблем возникает - OnGetNode -> я должен вызвать метод спец. едитора (до которого надо попроще добраться), который бы синхронизировал контент с БД. -- По сути хотелось бы максимально быстро и простро задействовать "виртуальную идеологию" VTW с максимально гибким контентом. Если это все таки невозможно в рамках VTW, то что вы посоветуете? Это сообщение отредактировал(а) NaumLeNet - 18.11.2006, 02:32 |
|||
|
||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
NaumLeNet, TVirtualDrawTree тебе в помощь
![]() И рисуй в любом виде. Или как вариант ещё можно посмотреть дополнительные компоненты и примеры на сайте Soft-Gems. Насколько я помню там был компонент Virtual Button Treeview - дерево, с кнопкой в каждой ячейке. скачать Virtual Button Treeview |
|||
|
||||
NaumLeNet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2005 Репутация: нет Всего: нет |
Bose
Отрисовать то, в принципе, не проблема =) Но ведь дело не только в отрисовке, а в реакции расположенных в гриде контролов на действия пользователей. Идеальный вариант расположение TFrame в ячейках грида. За Virtual Button Treeview пример сенькс, сейчас посмотрю, может решит мою проблему. -- Проблемы не решает. Реализация в лоб - отрисовка кнопки, контроль клика, перерисовка и прочее. Рендерить и контролить динамический контент на фрейме таким макаром, имхо, извращение. Как быть?... Это сообщение отредактировал(а) NaumLeNet - 23.11.2006, 13:07 |
|||
|
||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Моё сугубо персональное мнение в том, что создавать по фрейму для каждой ячейки, каждого столбца*каждого узла - это уже извращение ![]() ![]() Поэтому вариант с собственноручной прорисовкой мне кажется более простым ![]() NaumLeNet, а почему бы не рисовать эти фреймы самому?... В OnInitNode создавать нужные фреймы, а в OnDraw или в AfterCellPaint, корректировать координаты и размеры уже созданных фреймов... только вот по-моему тормозииить это будеееет.... |
|||
|
||||
NaumLeNet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2005 Репутация: нет Всего: нет |
Вот в тормозах и проблема )
Задача стоит простая - необходим обычный лист интерактивных элементов с разного рода контентом. Первым делом пробовал ScrollBox + TPanels (+ создание на них кучи контролов, типа лейблов / имаг и прочего). Тормозаааа... Потом в VS2005, в Syncfusion компонентах увидел реализацию грида, где каждая ячейка была UserControl'ом (+ DataBinding и прочие фишки). Портировать код просто нереально, слишком на дотнете завернуто. Там 50.000 юзерконтролов в гриде инициализировались ~1.5-2 сек(!) и работали быстро (явно грид виртуальный). |
|||
|
||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Всё, что могу посоветовать, это всё же использовать TvirtualDrawTree. Написать процедуру которая будет рендерить картинку фрейма в зависимости от данных, и выводить в дерево эту картинку. А при редактировании, уже подставлять вместо картинки реальный фрейм. Для увеличения скорости, отрендеренные картинки можно кэшировать, т.е. хранить в памяти копии всех фреймов, и перерисовывать их только, когда изменятся данные.
|
|||
|
||||
NaumLeNet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2005 Репутация: нет Всего: нет |
Я понимаю, о чем вы. Давайте еще разок -- отрендерить не проблема, организовать кэширование тоже. Редактировать не надо. А вот как внести интерактивность? ) На фрейме есть гиперссылки, есть пиктограммы (с обработкой MouseEnter/Leave) и прочие элементы.
|
|||
|
||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
Либо обрабатывай MouseMove в дереве, либо выводи на экран все элементы, и пусть они сами обрабатывают эти события ![]() NaumLeNet, по-моему, поставленная задача не имеет быстроработающего тривиального решения. Готового рецепта нет. Да и по-моему, это уже слишком: интерактивные элементы в виртуальном дереве ![]() ![]() |
|||
|
||||
NaumLeNet |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.12.2005 Репутация: нет Всего: нет |
Короче решил проблему ) Жестоко, но решил. На базе VTV:
OnInitNode: создание фрейма, внедрение его в VTV, data binding OnAfterCellPaint: появление фрейма, позиционирование его по Cell Rect'у. OnFreeNode: удаление фрейма TNodeData имеет указатель на связанный фрейм. Есть ряд проблем и нюансов, но думаю решу. Один из них: Т.к. OnAfterCellPaint не происходит, когда нода уходит из области видимости (к примеру, по причине изменения высоты нод(ы)... То фрейм который "связан" с этой нодой понятное дело остается на предыдущей позиции. Видать придется насильно обработать ряд нод за границей клиентской области. В общем всем спасибо. Вопрос закрыт. |
|||
|
||||
tauren81 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 27.7.2010 Репутация: нет Всего: нет |
А можно ли вставлять контролы не стандартного набора, а к примеру TRichViewEdit (как то так), проблема в том что он показывается во время инициализации редактирования, но прокрутка теряется, и что хуже после закрытия редактиорвания происходит не корректаня обработка фокуса, когда элемент родитель уже убит а сам контрол обрабатывается родными модулями, та же фигня с компонентами dxTreeList (хотел попуп едит затолкать). Неужто только придется использовать обычные компонеты?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |