(Windows only; Graphical interfaces only)
A control-frame is a field-level widget that holds an ActiveX control that you select for your application from the OpenEdge AppBuilder. A control-frame is always created dynamically.
A control-frame has no visualization.
The AVM instantiates two separate but related objects when you create a control-frame:
The widget itself provides a connection between the ActiveX control and the ABL user interface. When the widget is realized, the AVM creates a COM object that provides the real ActiveX control container support. Thus, the control-frame widget provides widget attributes and methods to manage the ABL side of the interface, while the control-frame COM object provides COM object properties and methods to gain access to the control itself.
When you insert an ActiveX control into your application, the AppBuilder creates a control-frame with the CREATE widget statement and specifies a default name (NAME attribute value) for the widget. The AppBuilder creates a design-time instance of the ActiveX control based on the control you select in the AppBuilder, making its design-time properties available to the AppBuilder. When you save your application, the AppBuilder saves the design-time instance in a separate file (with .wrx extension) for use at run time.
At run time, your application accesses the control indirectly through the control-frame widget. First, you use the COM-HANDLE attribute to return a component handle to the control-frame COM object. Second, you use this handle to access properties and methods of the control-frame COM object, which provide access to the ActiveX control itself.
This is a SmartViewer into which a developer, using the AppBuilder, has dropped a literal widget, a fill-in widget, and a control-frame widget. The control-frame widget holds a Crescent spin control, as shown:
Control-frame widget attributes
Control-frame widget methods:
ADD-EVENTS-PROCEDURE( ) method | MOVE-AFTER-TAB-ITEM( ) method |
MOVE-BEFORE-TAB-ITEM( ) method | MOVE-TO-BOTTOM( ) method |
MOVE-TO-TOP( ) method | REMOVE-EVENTS-PROCEDURE( ) method |
Control-frame COM object methods:4
/* Control Frame widget */ DEFINE VARIABLE hCFwid AS HANDLE NO-UNDO. /* Control Frame COM Object */ DEFINE VARIABLE hCFcom AS COM-HANDLE NO-UNDO. /* ActiveX Control */ DEFINE VARIABLE hDateSpin AS COM-HANDLE NO-UNDO. /* Control-frame created with handle hCFwid and loaded with ActiveX control named DateSpin. */ ASSIGN hCFcom = hCFwid:COM-HANDLE hDateSpin = hCFcom:DateSpin. |
As an alternative, use the COM object Controls property to return a handle to a control collection. Use the control collection Item(1) method call to return the handle to the ActiveX control. (This control collection object provides support for searching multiple ActiveX controls in a control-frame, available in a future release of OpenEdge.)
CREATE widget statement, The chapter on ActiveX control container support in OpenEdge Development: Programming Interfaces