Активируйте (основанный на COM Interop) ActiveX control, используя бесплатную регистрацию - PullRequest
2 голосов
/ 17 мая 2010

У меня есть (на основе взаимодействия COM) ActiveX control, который я пытаюсь использовать с бесплатной регистрацией com. Когда элемент управления загружается, элемент управления неактивен (не реагирует на события, элемент управления отображается не полностью и т. Д.).

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

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

<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>

1 Ответ

1 голос
/ 20 мая 2010

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

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

...