AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.12.2010, 10:27   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Синхронизация двух гридов
Подниму ка я в очередной раз давнюю тему синхронизации двух гридов.
Итак, имеем два грида связанных с одним источником данных. Общий источник данных обеспечивает синхронность выделения соответствующих строк, но не гарантирует сохранение взаимного расположения выделенных строк друг на против друга. Т.е. синхронизация данных есть (а это на мой взгляд самое главное), не хватает всего лишь синхронизации их отображения. Для этого достаточно отловить событие прокрутки одного грида и в нём прокрутить второй грид. что может быть проще . Тут у меня возникли непонятные трудности с перехватом события #WM_VSCROLL при помощи formRun.installMessageProc(). Пока сделал синхронизацию через таймер.
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);
}
Если кто подскажет как можно поймать #WM_VSCROLL, буду очень признателен.

P.S.: Делал на AX2009
За это сообщение автора поблагодарили: Ace of Database (3).
Старый 27.12.2010, 16:40   #2  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Вспомнил я тут кое-что. Давным-давно участвовал в разработке одной системы, тогда еще с текстовым (в смысле не графическим) интерфейсом. Штатного средства закрепления области в гридах тоже не было. Выкручивались так:
1) делалось, чтобы прокрутка вбок была возможна только целыми колонками, где-то по одной колонке, а где-то по нескольку сразу, например по N
2) "закрепляемая" область тупо дублировалась в этом гриде через каждые N колонок. При прокрутке у пользователя создавался полный эффект, что область из нескольких колонок слева закреплена.
Старый 14.04.2011, 17:14   #3  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Подниму ка я в очередной раз давнюю тему синхронизации двух гридов.
Итак, имеем два грида связанных с одним источником данных. Общий источник данных обеспечивает синхронность выделения соответствующих строк, но не гарантирует сохранение взаимного расположения выделенных строк друг на против друга. Т.е. синхронизация данных есть (а это на мой взгляд самое главное), не хватает всего лишь синхронизации их отображения. Для этого достаточно отловить событие прокрутки одного грида и в нём прокрутить второй грид. что может быть проще . Тут у меня возникли непонятные трудности с перехватом события #WM_VSCROLL при помощи formRun.installMessageProc(). Пока сделал синхронизацию через таймер.
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);
}
Если кто подскажет как можно поймать #WM_VSCROLL, буду очень признателен.

P.S.: Делал на AX2009

А удалось ли победить отказ прокрутки, при достижении неконтролируемым гридом конца?
Старый 14.04.2011, 19:01   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uchenik Посмотреть сообщение
А удалось ли победить отказ прокрутки, при достижении неконтролируемым гридом конца?
Не понял вопроса. У себя я вродебы никаких проблем не замечал. Может плохо искал? Опишите подробнее, что и в какой момент происходит не так.
Старый 24.04.2011, 22:00   #5  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Два грида, один источник данных, на втором стрелку скрола листаем вниз, при подходе к краю сетка продолжает листаться, но в этот момент перестает листаться первый грид (который двигается кодом). Перестают листать то ли после того как показали свободное пространство в гриде на одну строку, то ли на две.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Filter-by-Grid Blog bot DAX Blogs 2 30.05.2012 13:39
Dynamics AX: DAX 4.0 Filter by Grid [Update] Blog bot DAX Blogs 0 27.04.2007 17:10
Advanced programming: Grid data and view manipulations batiskaf_new DAX: Программирование 15 21.06.2006 11:44
Динамическая привязка полей в Grid Bars DAX: Программирование 1 22.11.2005 14:16
Объединить несколько полей таблицы в одном поле Grid-а на форме? storer DAX: Программирование 2 12.11.2003 14:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:38.