1

Clarionでは、OLE の定義をウィンドウで動的に設定しようとしています。現在、ウィンドウ内で 2 つの OLE オブジェクトを定義する方法は次のとおりです。

Window WINDOW('Test ActiveX Window'), AT(,,431,92), FONT('MS Sans Serif', 8,, FONT:regular), COLOR(COLOR:White), CENTER, ALRT(F2Key), TIMER(10), GRAY
        OLE, AT(10,3,11,7), USE(?MyOLE1), HIDE, CREATE('MyActiveX.MyActiveXCtrl.1'), COMPATIBILITY(021H) END
        OLE, AT(30,3,11,7), USE(?MyOLE2), HIDE, CREATE('SomeOtherActiveX.SomeOtherActiveXCtrl.1'), COMPATIBILITY(021H) END
    END

どちらのオブジェクトにも同じメソッド定義 (例: TestMethod) が含まれており、共通のインターフェイスを実装しているように見えます。現在、次のように条件付きで呼び出すことができます。

if (condition)
    testStr = ?MyOLE1{'TestMethod(param1)'}
else
    testStr = ?MyOLE2{'TestMethod(param1)'}
end

私がやりたいのは、オブジェクトを 1 つだけ作成してから、コントロールの定義を動的に設定することです。これを簡素化する他の方法 (OCX ラッパーなど) があることは知っていますが、プロジェクトの要件に基づいて、これを行う必要があります。ある時点で、このコードは 2 つのオブジェクトからさらに多くのオブジェクトに成長し、よりクリーンになります。

MyActiveX.MyActiveXCtrl.1コントロールの定義 (パーツ)を動的に設定するにはどうすればよいですか?

4

1 に答える 1

1

OLE オブジェクトを動的に作成する方法は次のとおりです。

Data

    MyOLE Long

Code

    MyOLE = 0
    MyOLE = Create(0, CREATE:OLE)

    ! Set the OLE's control definition dynamically:
    if (condition)
        ?MyOLE{PROP:Create} = 'ACTIVEXIDTECH.ActiveXIDTechCtrl.1'
    else
        ?MyOLE{PROP:Create} = 'SomeOtherActiveX.SomeOtherActiveXCtrl.1'
    end
于 2014-07-25T20:06:51.777 に答える