Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

параллельное перемещение в двух контролах на форме   Найти похожие ветки 

 
normandia   (2004-09-03 10:13) [0]

Прошу подсказать.
Есть форма. На ней дерево (DB_TreeView) и таблица (DBGrid).
Хотелось бы при перемещении курсора по таблице иметь параллельное перемещение по дереву. А именно, нажатия клавиш и мыши должны обрабатываться обоими элементами.
Видится решение так. После обработки нажатия клавиши или кнопки мыши в таблице эти же события должны передаваться для обработки к дереву.


 
normandia   (2004-09-03 10:15) [1]

В догонку.
Пардон, сам вопрос не задал.
Решение-то видится, но как это сделать не знаю.


 
Jeer ©   (2004-09-03 10:24) [2]

AfterScroll Dataset-a


 
TUser ©   (2004-09-03 10:26) [3]

Поймай wm_vscroll, wmhscroll у таблицы и пересылай их еще и дереву. Если будешь делать в 2-х направлениях, то предусмотри, чтобы не получитлось бесконечной "рекурсии".


 
normandia   (2004-09-03 10:34) [4]

2 Jeer
Если использовать AfterScroll Dataset-a, то как в нем отдать любое событие клавиатуры или мыши дереву?

2 TUser
Как поймать?


 
Jeer ©   (2004-09-03 10:35) [5]

TUser ©   (03.09.04 10:26) [3]
По меньшей мере, странное решение.

Связать два Dataset как Master-Detail или AfterScroll и Locate по id


 
Jeer ©   (2004-09-03 10:38) [6]

normandia   (03.09.04 10:34) [4]
Пользоваться методами для работы с базами, а не видимыми контролами.


 
normandia   (2004-09-03 10:41) [7]

Тогда самый общий вопрос.
А нельзя передать события после обработки в одном любом контроле для обработки в любой другой?


 
Jeer ©   (2004-09-03 10:52) [8]

Опять не то.
Оставь контролы в покое, если это DB-контролы и работай с Dataset-ами (TTable, TQuery, etc)


 
normandia   (2004-09-03 10:57) [9]

Дело в том, что компонента TDB_TreeView является потомком TTreeView, который не относится к DB-контролам.
Да и вообще интересно:)


 
Jeer ©   (2004-09-03 11:02) [10]

Тогда понятно.
Я бы сделал все же на TTable.AfterScroll определение текущей записи по id, а затем поиском по TDBTree

Ну получишь ты событие на перемещение Grid, а далее надо все равно достучаться до Dataset для определения id записи


 
normandia   (2004-09-03 11:04) [11]

Но ведь можно как-то программно эмулировать нажатия клавиш и мыши, относящиеся к какому-либо контролу?


 
Jeer ©   (2004-09-03 11:13) [12]

Можно, но представление данных в Tree и Grid сильно отличается др. от друга.
Как логику перемещений будешь реализовывать ?

Если у тебя были бы два линейных списка, совпадающих по порядку записей - то легко.
А если даже два Грида, но с разными сортировками ?
Как логику отработаешь ?

Поэтому и советую - привязываться по доступу к данным, а не визуальным их представлениям.


 
normandia   (2004-09-03 11:20) [13]

У меня Grid отображает список элементов активной открытой ветви дерева. Причем некоторые из элементов ветви в свою очередь сами могут быть развернуты, при этом таблица будет отображать список содержимого уже этой подветви. При возврате назад надо вернуться в пункт из которого был сделан вход, при этом если путь по дереву длинный, надо помнить id всех пунктов открытой ветви.
А если параллельно с таблицей внутри ветви происходит перемещение по дереву, я всегда узнаю откуда я в подветвь зашел и вернусь обратно туда же.
Списки в дереве и таблице в текущей ветви аналогичны по составу и сортировке, поэтому такое решение кажется удобным.


 
Amoeba ©   (2004-09-03 11:34) [14]

Что за DB_TreeView используется? Самописный или из готовой библиотеки (типа RaLib/JVcl, VgLib, Polaris)? Во свяком случае у тех компонентов DBTreeView, с которыми мне приходилось иметь дело, таких проблем не возникало.


 
Jeer ©   (2004-09-03 12:08) [15]

Поскольку TDBTree должна хранить всю таблицу или видимую ее часть, то логичным было бы хранить id и text поля.
Тогда нет проблем с синхронизацией.

Если не хочется связываться с id - тогда GetNextChild у TTreeView


 
normandia   (2004-09-03 21:42) [16]

> Amoeba
И у меня проблем не возникло.
Решение с навигацией через id записей самое очевидное.
Все я понимаю. И синхронную навигацию по дереву с использованием id записей ручками могу прописать.

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

Просто по ходу дела всплыл вопрос "можно ли событие клавиатуры передать для обработки двум контролам сразу?"
Теперь вопрос стал чисто теоретическим.
Хочу расширить свой кругозор:). Мало ли что пригодится в будущем. Если можно, прошу подсказать, порассуждать на эту тему.



Страницы: 1 вся ветка

Текущий архив: 2004.09.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
6-1089375941
ilop
2004-07-09 16:25
2004.09.19
Как узнать имена всех компов в сети.


3-1093323221
kva
2004-08-24 08:53
2004.09.19
InstallShield и BDE


14-1093420906
Alx2
2004-08-25 12:01
2004.09.19
Когда предприятию необходим собственный полноценный отдел АСУ?


6-1089387777
SnapIn
2004-07-09 19:42
2004.09.19
Как определить скорость работы сетевой карты


14-1093664170
Думкин
2004-08-28 07:36
2004.09.19
С днем рождения! 28 августа