Attivare un controllo (interoperabilità COM based) ActiveX utilizzando registrazione gratuita COM
-
27-09-2019 - |
Domanda
Ho (basata interoperabilità COM) un ActiveX contol che sto cercando di utilizzare con la registrazione gratuita COM. Quando i carichi di controllo del controllo è inattivo (non risponde agli eventi, il controllo reso non pienamente etc).
Dopo molta ricerca ho scoperto che COM oggetti usando libero-reg-com utilizzare l'attributo miscStatus per impostare lo stato iniziale per essere correttamente attivato. Io so come usarlo con un ComClass che corrisponde a un oggetto COM nativo.
1) Qual è l'equivalente di quanto segue per elemento clrClass che corrisponde ad un oggetto COM-interoperabilità?
<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) Il client COM che sto usando è Visual FoxPro. Se la (1) non è possibile quello che posso fare in VFP per attivare il controllo ActiveX inattivo. (Non mi occupo di VB o C # ingresso anche se posso usarlo per trovare il foxpro equivalente)
Al momento ho provato il seguente
this.AddObject('OleControl1', 'oleControl', 'SomeCompany.SomeOleControl')
this.OleControl1.AutoActivate = 3
this.OleControl1.Visible = .T.
this.OleControl1.SetFocus
Ma io l'OleControl1 ottiene attenzione prima di passare gli eventi come clic del mouse per i suoi sottoelementi. Quindi devo cliccare due volte su di esso per fare l'azione necessaria, in qualsiasi momento esso non ha messa a fuoco. Vorrei il controllo ad agire come se il "nouiactivate" del valore miscStatus è impostato.
3) C'è un altro modo di realizzare ciò che voglio fare?
Hans Passant, qui è la messa in vendita della corrente Assembly.dll.manifest. La formattazione nel commento reso illeggibile.
<?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>
Soluzione
Ho controllato la proprietà "OLETypeAllowed" del OLEControl1 ed era 1 (oggetto OLE incorporato), invece di -2 (oggetto ActiveX). Quindi l'oggetto non viene attivato normalmente.
Questo sembra più si tratta di un problema di Visual FoxPro. Io posto una nuova domanda per quanto riguarda questo.