有条件地设置OLE定义(Conditionally set OLE definition)

2019-09-30 08:31发布

在号角 ,我期待在一个窗口中动态设置定义的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部分)?

Answer 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


文章来源: Conditionally set OLE definition