1

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

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 回答