|
Интеграция
|
|||
---|---|---|---|
#18+
Очень хочу сделать элемент управления ActiveX и положить его на форму, разработанную на Delphi 7. Есть способ, правда он недокументированный: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 08:17 |
|
Интеграция
|
|||
---|---|---|---|
#18+
maybeleo Алексей К? оно? MSDNRegistry Entry HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\ {CLSID}\Control Remarks This optional entry is used by containers to fill in dialog boxes. The container uses this subkey to determine whether to include an object in a dialog box that displays ActiveX Controls. A control can omit this entry if it is designed to work only with a specific container and therefore does is not intended to be inserted in other containers. Да, это оно. Собственно, выделенное жирным и настораживает. Я даже знаю, что этим specific container-ом является Internet Explorer. К сожалению, я не знаю более разумного способа вставить контрол из .Net в Delphi. В принципе, там необязательно использовать ActiveX. Задача, чтобы на .Net было разработано содержимое MDI Child формы. Мне показалось, что наиболее разумно MDI Child форму сделать в Delphi, а на неё положить "ActiveX.Net". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 15:25 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КСобственно, выделенное жирным и настораживает. Я даже знаю, что этим specific container-ом является Internet Explorer. К сожалению, я не знаю более разумного способа вставить контрол из .Net в Delphi. В принципе, там необязательно использовать ActiveX. Задача, чтобы на .Net было разработано содержимое MDI Child формы. Мне показалось, что наиболее разумно MDI Child форму сделать в Delphi, а на неё положить "ActiveX.Net".Имхо, это вполне нормальный способ (все остальное мне видится только через большую ж...). Насчет будущих версий - так WinForms вроде менятся не будет... А значит, и способ, каким .NET контролы будут видны для натива, не поменяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 15:32 |
|
Интеграция
|
|||
---|---|---|---|
#18+
maybeleoвсе остальное мне видится только через большую ж...Вчера целый день колдовал в виндовыми хэндлами, изучал реализацию MDI в WinForms и VCL. В итоге MDI форма получилась, но коряво. Разместить контрол на Delphi форме вроде получилось. Не получилось изменение фокуса в нём по кнопке Tab. Наверняка ещё много чего не получилось, но я просто пока не заметил. :-) Полная ж@па. В общем ладно, похоже вариантов больше нет. Остановлюсь на COM Expose + ActiveX Control. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 15:42 |
|
Интеграция
|
|||
---|---|---|---|
#18+
maybeleoНасчет будущих версий - так WinForms вроде менятся не будет... А значит, и способ, каким .NET контролы будут видны для натива, не поменяется.Очень на это надеюсь. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 15:43 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КНе получилось изменение фокуса в нём по кнопке TabЭто известный прикол. Когда-то я как-то решал такую проблемку, точно уже не помню, как. По-моему, в хосте ActiveX-компонента отдельно засылал такое событие в WndProc самого ActiveX-компонента. А в нем, при достижении "последнего" контрола, слал нажатие Tab-а "наверх", хосту компонента. Примерно так, конечно, немного гемморно. Ну да в сети можно нарыть примеры работающего решения, это точно, т.к. лажа сия, повторюсь, известная. ЗЫ. <joke>Может, 1 известный дельфи-гуру подскажет точнее? :)</joke> ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 15:59 |
|
Интеграция
|
|||
---|---|---|---|
#18+
maybeleo Алексей КНе получилось изменение фокуса в нём по кнопке TabЭто известный прикол. Когда-то я как-то решал такую проблемку, точно уже не помню, как. По-моему, в хосте ActiveX-компонента отдельно засылал такое событие в WndProc самого ActiveX-компонента. А в нем, при достижении "последнего" контрола, слал нажатие Tab-а "наверх", хосту компонента. Примерно так, конечно, немного гемморно. Ну да в сети можно нарыть примеры работающего решения, это точно, т.к. лажа сия, повторюсь, известная. ЗЫ. <joke>Может, 1 известный дельфи-гуру подскажет точнее? :)</joke>С ActiveX там вроде нормально, есть одна трабла, но её описание где-то раньше видел в MSDN. Проблема с Tab-ом была, когда я .Net Control размещал на "дельфийской" форме с помощью SetParent из WinAPI. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 16:48 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Пипец кароче... 1. В ActiveX.Net создаём PropertyGrid.Net. 2. В "MDI child форма".Delphi7 создаём ActiveX.Net. PropertyGrid начинает дико тормозить с при отрисовке. Скорость отрисовки напрямую зависит от количества видимых ячеек. Тот же PropertyGrid в обычном .Net приложении работает нормально. Кто-нибудь может объяснить природу траблы? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 13:03 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КПипец кароче... 1. В ActiveX.Net создаём PropertyGrid.Net. 2. В "MDI child форма".Delphi7 создаём ActiveX.Net. PropertyGrid начинает дико тормозить с при отрисовке. Скорость отрисовки напрямую зависит от количества видимых ячеек. Тот же PropertyGrid в обычном .Net приложении работает нормально. Кто-нибудь может объяснить природу траблы? ето от природы активХ =) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 14:22 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КИ это все время так, или только при первой прорисовке пропертигрида? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 14:24 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Volhv Алексей КПипец кароче... 1. В ActiveX.Net создаём PropertyGrid.Net. 2. В "MDI child форма".Delphi7 создаём ActiveX.Net. PropertyGrid начинает дико тормозить с при отрисовке. Скорость отрисовки напрямую зависит от количества видимых ячеек. Тот же PropertyGrid в обычном .Net приложении работает нормально. Кто-нибудь может объяснить природу траблы? ето от природы активХ =) в актив Х - не стоит запихивать часто перерисовываемые обьекты - потому что показывается картинка а не прямая отрисовка (буферизируемая кароче) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 14:27 |
|
Интеграция
|
|||
---|---|---|---|
#18+
по етому в обычном приложении обновляется только регион - а в ActiveX - весь блок контролла ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 14:28 |
|
Интеграция
|
|||
---|---|---|---|
#18+
maybeleoИ это все время так, или только при первой прорисовке пропертигрида?Всё время. При вызове PropertyGrid.Refresh(); Volhvето от природы активХ =) Ну вообще странно. В этом же контроле находится мегатормозной DataGridView. Отрисовывается не хуже чем обычно. Скрываем панель с PropertyGrid-ом - всё нормализовывается. Резайзим SplitContainer, чтобы в PropertyGrid отображалась одна ячейка - всё летает. Ладно, завтра дальше буду разбираться. Похоже весёлые будут выходные. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 14:44 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КВсё время. При вызове PropertyGrid.Refresh();Так-так... Именно при рефреше? Т.е. если у него позвать Invalidate() + Update(), а не Refresh(), эффект тот же? (смотрю в рефлекторе на евойный рефреш) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 15:06 |
|
Интеграция
|
|||
---|---|---|---|
#18+
maybeleo Алексей КВсё время. При вызове PropertyGrid.Refresh();Так-так... Именно при рефреше? Т.е. если у него позвать Invalidate() + Update(), а не Refresh(), эффект тот же? (смотрю в рефлекторе на евойный рефреш)Пока ещё не пробовал. Спасибо. Завтра попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2007, 15:09 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Как-то странно он себя ведёт: Refresh() - ~300 милисекунд Invalidate() + Update() - ~1 милисекунда Просто перерисовка происходит быстро. Долго происходит обновление значений свойств + перерисовка. Ладно, ещё поэкспериментирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2007, 07:00 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Там у меня подсоединён CustomTypeDescriptor. Если в GetProperties возвращается та же коллекция PropertyDescriptor-ов, то всё работает быстро. А у меня она каждый раз пересоздаётся. Попробую по-другому написать. Всем спасибо. :-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2007, 07:14 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Всё, проверил. Нельзя каждый раз создавать новую PropertyDescriptorCollection. ЗЫ: странно, что в обычном .Net приложении работало нормально... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2007, 07:23 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КВсё, проверил. Нельзя каждый раз создавать новую PropertyDescriptorCollection. ЗЫ: странно, что в обычном .Net приложении работало нормально...Хи-хи, вот я так и подумал. ЗЫ. Алексей, если будет повод, не могли бы Вы как-нить на досуге проверить скорость работы рефлексии, когда что-то нетовское оформлено в виде ActiveX и хостится в нативном приложении? Косяк, как Вы увидели, какой-то с этим есть, только действительно непонятно, почему... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2007, 10:57 |
|
Интеграция
|
|||
---|---|---|---|
#18+
maybeleoпроверить скорость работы рефлексииА там у меня рефлексии как таковой нет. Там обращение идёт через мой наследник от CustomTypeDescriptor + MyPropertyDescriptor. Дальше оно обращается к ICustomTypeDescriptor реализации в DataRowView. ЗЫ: Если встречу там какие-нибудь траблы с рефлекшеном - напишу. Пока кроме недавней проблемы траблов больше не замечено. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2007, 11:20 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Условия задачи те же. Имеем форму на Delphi 7. На ней лежит ActiveX.Net. Возникла следующая проблема. Неправильно обрабатываются клавиши "вправо", "влево", "вверх" и "вниз". Например, когда фокус ввода находится в TextBox, вместо перемещения курсора происходит изменение фокуса. Если поместить тот же контрол на форму в Excel 2003, то все работает нормально. Интересуют следующие вопросы: 1. Почему такое имеет место быть в Delphi? 2. Ваше мнение о моём решении проблемы. Чего я ещё мог не учесть? В каких условиях это может не работать? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2007, 06:56 |
|
|
start [/forum/topic.php?fid=20&fpage=68&tid=1400861]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
others: | 288ms |
total: | 439ms |
0 / 0 |