在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
部分)?
答案 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