2014-07-25 3 views
1

Dans Clarion, je cherche à définir la définition d'un OLE dynamiquement dans une fenêtre. En ce moment, voilà comment je définir deux objets OLE dans une fenêtre:Définir conditionnellement Définition 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 

Les deux objets contiennent les mêmes définitions de méthode (. Ex TestMethod), presque comme ils mettent en œuvre une interface commune. Je peux actuellement les appeler conditionnellement comme ceci:

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

Ce que je voudrais faire est de créer un seul objet, puis définir dynamiquement la définition du contrôle. Je sais qu'il y a d'autres façons de simplifier cela (wrappers OCX, etc), mais en fonction des exigences du projet, voici comment cela doit être fait. À un certain point, ce code passera de 2 objets à beaucoup plus et ce sera beaucoup plus propre.

Comment puis-je définir dynamiquement la définition du contrôle (partie MyActiveX.MyActiveXCtrl.1)?

+0

Quel est le motif de la downvote à ce sujet? Déroutant? Pas une langue populaire? – DanM7

Répondre

1

Voici comment créer un objet OLE dynamiquement:

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 
Questions connexes