Форум: "Основная";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Внизпараллельное перемещение в двух контролах на форме Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c