This project contains an example that demonstrates a program written using DUIM which can be used 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.
This is a simple drawing program, where the user can do arbitrary
free-hand line drawing by dragging the mouse. The file
scribble.dylan has only a couple of modifications from the
original non-OLE version (in the DUIM example scribble in
Examples\duim\scribble\): the scribble frame inherits from
<ocx-frame>
instead of
<simple-frame>
, and a couple of calls to
note-embedded-data-changed
have been inserted. The file
storage.dylan implements persistent storage and the file
run.dylan adds some additional support for use as an OLE
Control. This control defines one read-only property, which is the
number of lines drawn, and one method, which erases the drawing.
Building this library produces a file named ocx-scribble.dll. You might want to manually rename it to scribble.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 scribble.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 scribble.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. It 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 DUIM OCX Scribble", which comes from the documentation
option in the define coclass
form in file run.dylan.