登録無料comを使用して(com interopベース)activex contolをアクティブ化します
-
27-09-2019 - |
質問
登録無料comで使用しようとしている(com Interopベースの)ActiveXコンティルがあります。コントロールがロードされると、コントロールは非アクティブです(イベントに応答しません。コントロールは完全にレンダリングされていません)。
多くの検索の後、reg-free-comを使用してcomオブジェクトがmiscStatus属性を使用して初期状態を設定して正しくアクティブ化されることを発見しました。ネイティブCOMオブジェクトに対応するComClassで使用する方法を知っています。
1)com-interopオブジェクトに対応するclrclass要素の以下に相当するものは何ですか?
<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コントロールをアクティブにします。 (同等のFOXPROを見つけるためにそれを使用できれば、VBまたはC#入力も気にしません)
現在、以下を試しました
this.AddObject('OleControl1', 'oleControl', 'SomeCompany.SomeOleControl')
this.OleControl1.AutoActivate = 3
this.OleControl1.Visible = .T.
this.OleControl1.SetFocus
しかし、私は、マウスクリックなどのイベントをサブエレメントに合格する前に、Olecontrol1がフォーカスを取得します。そのため、必要なアクションを実行するには、2回クリックする必要があります。 Controlが、MiscStatus値の「nouiactivate」が設定されているかのように行動したいと思います。
3)私がやりたいことを達成する他の方法はありますか?
Hans Passant、Current 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>
解決
Olecontrol1の「Oletypeallowed」プロパティをチェックしましたが、-2(ActiveXオブジェクト)の代わりに1(埋め込まれたOLEオブジェクト)でした。したがって、オブジェクトは正常にアクティブ化されません。
これは、視覚的なFOXPROの問題のように見えます。これに関する新しい質問を投稿します。