Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.044 c
1-1093983709
dms_main
2004-09-01 00:21
2004.09.19
dll


3-1093380738
ceval
2004-08-25 00:52
2004.09.19
Подскажите как заменить ADOTable на ADOQuery


3-1092988702
Janbolat
2004-08-20 11:58
2004.09.19
Скиньте линки про запросы, query если можно с чем их едят


14-1094039733
SDK
2004-09-01 15:55
2004.09.19
Сколько стоит Flash диск?


3-1092975265
Князев Сергей
2004-08-20 08:14
2004.09.19
BDE не встает и все тут





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский