|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Подниму ка я в очередной раз давнюю тему синхронизации двух гридов.
Итак, имеем два грида связанных с одним источником данных. Общий источник данных обеспечивает синхронность выделения соответствующих строк, но не гарантирует сохранение взаимного расположения выделенных строк друг на против друга. Т.е. синхронизация данных есть (а это на мой взгляд самое главное), не хватает всего лишь синхронизации их отображения. Для этого достаточно отловить событие прокрутки одного грида и в нём прокрутить второй грид. что может быть проще ![]() X++: void timer() { #WinAPI int NewPos = WinAPI::getScrollPos(Grid1.hWnd(), #SB_VERT); ; if (NewPos != pos) { pos = NewPos; WinAPI::setScrollPos(Grid2.hWnd(), #SB_VERT, pos, true); WinAPI::sendMessageEx(Grid2.hWnd(), #WM_VSCROLL, (pos << 16) | #SB_THUMBTRACK, 0); WinAPI::sendMessageEx(Grid2.hWnd(), #WM_VSCROLL, (pos << 16) | #SB_THUMBPOSITION, 0); } this.setTimeOut(identifierstr(timer), #delay, false); } P.S.: Делал на AX2009 А удалось ли победить отказ прокрутки, при достижении неконтролируемым гридом конца? |
|
![]() |
#2 |
Участник
|
|
|
![]() |
#3 |
Участник
|
Два грида, один источник данных, на втором стрелку скрола листаем вниз, при подходе к краю сетка продолжает листаться, но в этот момент перестает листаться первый грид (который двигается кодом). Перестают листать то ли после того как показали свободное пространство в гриде на одну строку, то ли на две.
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|