Здравствуйте.
Столкнулся со следующей проблемкой:
Забацал на ВБ АктивХ с кучкой DbGrid-ов.
В тестовых проэктах (на ВБ и на С++) все работает хорошо.
Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.
Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени...
Может кто-нибудь уже сталкивался с этим и знает как это побороть...
Причем все дело именно в DataGride (так как ОСХ с FlexGrid работает (правда там мне ручками пришлось ЕдитВох вставлять в нужную ячейку и соответствкенно все KeyUp/KeyPress в ОСХ обрабатывать, а тут этот Грид сам все делает...)
Уточнение: OCX на самом деле не в простом диалоге а в PropertyPage. Но вряд ли это имеет значение...
Спасибо всем кто попытался вникнуть и большое спасибо тем кто что-то сможет посоветовать...
Виктор
А>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.
Это как ... неработают ? А>Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени...
Не пойму, зачем нажатие (левой кнопки мыши) курсора отсылать в OCX ?
Он сам не реагирует разве на нажатие ? не ловит их ?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте. А>Столкнулся со следующей проблемкой: А>Забацал на ВБ АктивХ с кучкой DbGrid-ов. А>В тестовых проэктах (на ВБ и на С++) все работает хорошо.
А>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.
Если DbGrid написан на ATL, то возможная причина описана в Q232624 .
Re[2]: ActiveX + Dll + PreTranslateMessage.
От:
Аноним
Дата:
02.12.03 15:12
Оценка:
Здравствуйте, KGP, Вы писали:
KGP>Здравствуйте, <Аноним>, Вы писали:
А>>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают. KGP>Это как ... неработают ?
Стрелки вправо/влево/вверх/вниз не позволяют передвигаться по ячейкам... Причем влево и вправо работают только в пределах ячейки. В то же время в тестовом проектк все тип-топ.... А>>Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени... KGP>Не пойму, зачем нажатие (левой кнопки мыши) курсора отсылать в OCX ?
А про мишь никто не говорил. Кстати на правую кнопку в ОСХ навешено меню и все отлично работает.
Re[2]: ActiveX + Dll + PreTranslateMessage.
От:
Аноним
Дата:
02.12.03 15:20
Оценка:
Здравствуйте, algol, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте. А>>Столкнулся со следующей проблемкой: А>>Забацал на ВБ АктивХ с кучкой DbGrid-ов. А>>В тестовых проэктах (на ВБ и на С++) все работает хорошо.
А>>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.
A>Если DbGrid написан на ATL, то возможная причина описана в Q232624 .
Да откуда ж я знаю на чем этот DbGrid (.../system32/MSDATGRD.ocx) написан. Да и как мне поможет это знание — Microsoft не поставляет исходников
Я то понимаю что это в самом DbGrid не происходит передача мессажа от EditBox ячейки в сам Grid... Но как это обойти , вот в чем вопрос...
Здравствуйте, Аноним, Вы писали:
А>Теперь вставил этот OCX в диалог в COM Dll (ATL + MFC) и вызываю как немодальный диалог. Результат — клавиши навигации по гриду не работают.
А>Добавляю PreTranslateMessage(...). Он конечно никогда не вызывается (в ДЛЛ нет собственного MessagePump). Ладно, вызовем етот диалог в собственном thread (используя CWinThread). Теперь PreTranslateMessage(...) в диалоге работает, но толку от этого никакого. Т.е. даже если я переадресую нажатие клавиш курсора в мой ОСХ (с помощью ::SendMessage(...), то ему это до фени...
Вроде все правильно. Только попробуй посылать сообщения не OCX контролу а конкретному гриду, в котором нужна навигация.