This project contains a simple example that demonstrates using a DUIM gadget as an OLE Control (also known as an "OCX" or "ActiveX Control").
This example uses the DUIM-OLE-Control library which is documented in the Functional Developer "OLE, COM, ActiveX and DBMS" reference manual.
The file control.dylan defines a frame containing a single button and a dialog box that appears when the button is pressed. The dialog box has a text pane that can be edited. The file store.dylan implements persistent storage of the text in the container document file. The file run.dylan makes the frame into an OLE control and implements a "Text" property that can be used to access the dialog box text. Some additional properties will be created automatically for the button gadget.
Building this library produces a file named button-ocx.dll. You might want to manually rename it to button.ocx.
In order for the control to work when invoked from a container program, all of the libraries used by your control need to either be in the same directory as the control DLL file, or else in a directory which is in the system PATH (not the individual user's PATH on NT). The simplest way to accomplish this is to use the "Project > Build Release" command to create a release directory. If you wish, you can move that directory to any location you want, but you must do so before you attempt to register the control.
To register the control, use the regsvr32
command line
utility like this:
regsvr32 button.ocx
(The complete pathname will need to be given if the file is in a
different directory that is not in the PATH.) This will cause the
appropriate entries to be made in the Windows System Registry. (For
use in a batch script, the "/s
" option may be used to
suppress the dialog box reporting completion.) The full pathname of
the control is recorded, so you must unregister the control before you
move or delete it. You can unregister it by doing:
regsvr32 /u button.ocx
This invokes the control to unregister itself, so won't work if the control has been deleted first.
Now you should be able to insert the object into any OLE Control container
program. For example, there is a "Test Container" application included
with Visual C++ which can be used. Note that "View -> Properties" can be
used to view and change the properties of the control, such as the button
label and the dialog text. The control can also be embedded in an OLE
document container, such as WordPad, but the properties will not be
accessible. In the "Insert object" dialog, this program will be identified
as "Dylan button gadget demo", which comes from the documentation
option in the define coclass
form in file run.dylan.