有条件地设置OLE定义

时间:2014-07-25 14:49:58

标签: activex ole activexobject clarion

Clarion中,我希望在窗口中动态设置OLE的定义。现在,这就是我在窗口中定义两个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

我想做的只是创建一个对象,然后动态设置控件的定义。我知道还有其他方法来简化这个(OCX包装器等),但根据项目的要求,这就是必须要做的。在某些时候,这段代码将从2个对象增长到更多,这将更加清晰。

如何动态设置控件的定义(MyActiveX.MyActiveXCtrl.1部分)?

1 个答案:

答案 0 :(得分: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