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>
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top