2010-05-17 4 views
2

У меня есть ActiveX contol, основанный на COM-интерфейсе, который я пытаюсь использовать с бесплатной регистрацией. Когда управление загружается, управление неактивно (не отвечает на события, управление не полностью отображается и т. Д.).Активировать (ActiveX contol based) на основе COM, используя бесплатную регистрацию

После многократного поиска я обнаружил, что объекты COM, использующие reg-free-com, используют атрибут miscStatus для правильного включения начального состояния. Я знаю, как использовать его с comClass, который соответствует родному COM-объекту.

1) Что такое эквивалент следующего элемента clrClass, который соответствует объекту COM-interop?

<comClass clsid="{qqqqqqqq-wwww-eeee-rrrr-00C0F0283628}"    
    tlbid="{xxxxxxxx-yyyy-zzzz-aaaa-0000F8754DA1}"    
    threadingModel="Both"     
    progid="SomeCompany.SomeOleControl"    
    description="Some ActiveX Control" 
    miscStatus="recomposeonresize,insideout,activatewhenvisible,nouiactivate" > 

2) COM-клиент, которым я пользуюсь, является Visual FoxPro. Если (1) невозможно, то что я могу сделать в VFP для активации неактивного элемента управления ActiveX. (Я не ум VB или C ввод # тоже, если я могу использовать его, чтобы найти эквивалент FoxPro)

В настоящее время я попробовал следующее

this.AddObject('OleControl1', 'oleControl', 'SomeCompany.SomeOleControl') 
this.OleControl1.AutoActivate = 3 
this.OleControl1.Visible = .T. 
this.OleControl1.SetFocus 

Но Я, OleControl1 получает фокус перед передачей события, как щелчок мыши на его подэлементы. Поэтому я должен дважды щелкнуть по нему, чтобы выполнить необходимые действия, в любое время, когда у него нет фокуса. Я бы хотел, чтобы управление действовало так, как будто «nouiactivate» значения miscStatus установлено.

3) Есть ли другой способ выполнения того, что я хочу сделать?

Hans Passant, вот список текущего Assembly.dll.manifest. Форматирование в комментарии сделало его нечитаемым.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 

<assemblyIdentity name="Assembly" 
version="1.0.0.0" type="win32" publicKeyToken="wwwwwwwwwwwwwwww"/> 
<clrClass 
name="SomeCompany.SomeOleControl" 
clsid="{qqqqqqqq-wwww-eeee-rrrr-00C0F0283628}" 
progid="SomeCompany.SomeOleControl" 
threadingModel="Both"/> 
<file name="Assembly.tlb"> 
<typelib 
    tlbid="{xxxxxxxx-yyyy-zzzz-aaaa-0000F8754DA1}" 
    version="1.0" 
    helpdir="" 
    flags="hasdiskimage"/> 
</file> 
</assembly> 
+0

Для элемента не существует. Я сомневаюсь, что это проблема, действительно ли она работает правильно, если вы используете Regasm.exe вместо манифеста? –

+0

Я пробовал miscstatus для элемента . Это было проигнорировано. Он корректно работает с регистрацией с помощью Regasm. Вот как я это делаю прямо сейчас. Однако это мой первый удар при использовании файлов манифеста. Я предпочитаю решать проблему, используя файлы манифеста, чем в коде. Таким образом, код будет работать в любом случае с регистрацией или без нее. Я ценю любую помощь, которую вы можете мне помочь в создании файлов манифеста. я добавлю еще один комментарий с листинг assembly.dll.manifest – embnut

+0

<имя clrClass = "SomeCompany.SomeOleControl" CLSID = "{qqqqqqqq-WWWW-ээээ-рррр-00C0F0283628}" ProgID = "SomeCompany.SomeOleControl" ThreadingModel = "Both" /> <имя файла = "Assembly.tlb"> embnut

ответ

1

Я проверил "oletypeallowed" свойство olecontrol1 и это было 1 (встроенный объект OLE) вместо -2 (объект ActiveX). Таким образом, объект не активируется нормально.

Это больше похоже на проблему Visual FoxPro. Я отправлю новый вопрос по этому вопросу.

 Смежные вопросы

  • Нет связанных вопросов^_^