|
Интеграция
|
|||
---|---|---|---|
#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 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Очень интересует данная тема. Есть ли какой-нибудь рабочий пример ActiveX контрола? Весь тырнет перерыл... все как-то про COM, а данная тема так нигде нормально не раскрыта... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 10:56 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Блин, страшные вещи вы тут пишете. Это будни поддержки замогильного кода, или сейчас модно эктив иксами по формам разбрасываться? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2015, 15:46 |
|
Интеграция
|
|||
---|---|---|---|
#18+
AlexUser987Блин, страшные вещи вы тут пишете. Это будни поддержки замогильного кода, или сейчас модно эктив иксами по формам разбрасываться? Бывают задачи, которые можно решить только написанием ActiveX. В моем случае это приложение системы эл. документооборота в котором можно создавать свои формы и вешать несколько контролов, которые идут вместе с этим ПО. Таких систем на постсоветском пространстве не так много и в во всех этих системах проблема с ограниченным количеством и ограниченым функционалом этих контролов. Но зато у этих систем есть возможность подключать ActiveX. Вроде бы бери себе MS Forms 2.0 и в путь, но и тут натыкаемся на то, что часть из контролов глючит, не у всех установлено (идет с MS Office), и тоже не имеет всех "распрекрас" современных контролов того же FW. Если Вы знаете уже писаные ActiveX компоненты или как вытянуть элементы Windows Forms другим способом, буду признателен за подсказку. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 08:29 |
|
Интеграция
|
|||
---|---|---|---|
#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".CLR host? У Рихтера про это есть. Я так в своё время .NET формы в Centura интегрировал. Немного C++, немного PInvoke, и работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 08:46 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Ashoorup, я Вам своё предыдущее сообщение адресую. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 08:49 |
|
Интеграция
|
|||
---|---|---|---|
#18+
skyANA , спасибо! Ушел в изучение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 09:07 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Что-то просветления никакого не наступило.. skyANA, как вообще можно воспользоваться .NETовскими контролами не через ActiveX? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 13:25 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Через CLR host можно как я понял в неуправляемом коде запустить CLR и загрузить сборку и например нужный нам метод. Но теперь проблема, в том что у меня неуправляемая среда VBScript :) и как там сделать Код: plaintext 1. 2.
без понятия:) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 13:52 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Ashoorupкак вообще можно воспользоваться .NETовскими контролами не через ActiveX?Ну я же дал ссылку на работающий пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 14:24 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КAshoorupкак вообще можно воспользоваться .NETовскими контролами не через ActiveX?Ну я же дал ссылку на работающий пример. По ссылке создание ActiveX. У меня все получилось создать и все работает. Спасибо! Но теперь я еще заинтересовался темой Хостинга CLR . Если я правильно понял, то можно из неуправляемого кода взять сборки и работать с ними... Отсюда вопрос: а можно ли таким способом "вытянуть" контрол на свою форму? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 15:26 |
|
Интеграция
|
|||
---|---|---|---|
#18+
AshoorupОтсюда вопрос: а можно ли таким способом "вытянуть" контрол на свою форму?Если я правильно понял что предложил skyANA, то придётся самому реализовывать работу с ActiveX Controls Interfaces . На мой взгляд проще взять за основу родной экспорт ActiveX и дополнить его костылями, если вдруг что-то там не устроит. С другой стороны, я напрямую с CLR host не работал, может и не всё так страшно, пусть лучше skyANA прокомментирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 15:35 |
|
Интеграция
|
|||
---|---|---|---|
#18+
ОК. Ждем ответ от skyANA Алексей К , еще такой вопрос: возможно ли сделать так, чтобы в одной сборке по сути один ActiveX было несколько контролов с разными свойствами? Допустим по умолчанию все контролы скрыты и не отображаются, а я уже в своем приложении делаю видимым нужный мне контрол и работаю с ним. Или идея похожа на БредСивойКобылы ?:) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 15:52 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КAshoorupОтсюда вопрос: а можно ли таким способом "вытянуть" контрол на свою форму?Если я правильно понял что предложил skyANA, то придётся самому реализовывать работу с ActiveX Controls Interfaces .Хотя нет, можно обойтись и без интерфейсов AcitveX. Зная дескриптор родительской формы можно делать так: Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 15:56 |
|
Интеграция
|
|||
---|---|---|---|
#18+
AshoorupОК. Ждем ответ от skyANA Алексей К , еще такой вопрос: возможно ли сделать так, чтобы в одной сборке по сути один ActiveX было несколько контролов с разными свойствами? Допустим по умолчанию все контролы скрыты и не отображаются, а я уже в своем приложении делаю видимым нужный мне контрол и работаю с ним. Или идея похожа на БредСивойКобылы ?:)В одной сборке могут жить много контролов, если я правильно понял постановку задачи. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 15:59 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Алексей КВ одной сборке могут жить много контролов, если я правильно понял постановку задачи. :-) Но в списке на вставку нужного контрола будет несколько, а хотелось бы 1. Хотя вот думаю... а нафик... удобно ли это потом будет...:) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 16:08 |
|
Интеграция
|
|||
---|---|---|---|
#18+
AshoorupОК. Ждем ответ от skyANA на чем написаны "свои формы" и что конкретно в них нужно встроить? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 21:02 |
|
Интеграция
|
|||
---|---|---|---|
#18+
skyANAна чем написаны "свои формы" и что конкретно в них нужно встроить? Смотря какая система. Одна система писана на C++, другая на Delphi третья возможно на .NET. Другое дело, что работа уже разработчиков(пользователей) этих систем с формами и компонентами предоставляемой этой средой ведется на скриптовых языках. У одних это свой скриптовый язык причем русскими операторами (1С: Предприятие). У других это VBS у третьих JS и VBS. Но у всех почему-то встроенные элементы управления не богаты функционалом. У всех систем есть возможность подключить и COM и ActiveX. Вот я и хочу расширить функционал по сути всех этих систем... Встроить в формы нужно как можно больше элементов из Windows.Forms .NETовских ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2015, 08:25 |
|
Интеграция
|
|||
---|---|---|---|
#18+
А PropertyPages у кого-нибудь на C# получалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2015, 16:40 |
|
Интеграция
|
|||
---|---|---|---|
#18+
Может кто подскажет по таким вопросам: 1. Если свойство у ActiveX контрола { get; set; } ,то в редакторе кода IntelliSense работает и свойство отображается. Но если есть только { set; }, то не отображается. В чем причина? 2. По умолчанию интерфейс IUnknown есть у любого ActiveX контрола, и естественно с ним есть открытые методы: AddRef(), Release(), и т.д. Как их убрать их IntelliSense. Знаю что есть специальственный атрибут, но где его писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 14:02 |
|
Интеграция
|
|||
---|---|---|---|
#18+
По первому вопросу экспериментировал с разными атрибутами - фифекта не принесло :( Код: c# 1. 2.
А по второму у меня интерфейс IDispatch, а не IUnknown. Но от этого не легче. Я хочу чтобы методы (7шт.) IDispatch не отображались в редакторе кода, но вот сомневаюсь, что это возможно. Потому как private делать их нельзя, а все что public, то по умолчанию видно в редакторе. Возможно атрибут [EditorBrowsable(EditorBrowsableState.Never)] для этих методов сработает, но я не знаю где их найти... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2016, 08:58 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1400861]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 471ms |
0 / 0 |