>>  <<  Ndx  Usr  Pri  JfC  LJ  Phr  Dic  Rel  Voc  !:  wd  Help  User

J OLE/OCX Client

J interacts with OLE and OCX controls using the Window Driver. You need a parent window to display the control, and you then create and use a OLE/OCX control in much the same way as for any other child control. You can use both standard and OLE/OCX controls on the same form.

wd 'cc tree ocx:comctl.treectrl.1'
wd 'cc xl oleautomation:excel.application'

OCX and OLE controls are not distributed with J. Some OCX and OLE controls are included with Windows, and with software such as Visual Basic. In some cases, these are subsets or earlier versions of the full systems obtainable from the original manufacturer. For serious use, we recommend you purchase the most recent versions of the controls, which will then include full documentation and support.

To see which OCX controls are available, create a new form using the Form Editor, then click New for new control, and select class OCX.

OLE controls are not supported by the Form Editor and should be added directly in the form_run verb. The names of the OLE controls that are available are not visible from J.

An OCX or OLE control is a child on a form that contains an object named base. This base object can contain other objects. For example the base object could contain a font object. An object is identified by the child id and the name of the object. The name temp refers to a contained object that has been returned by a method or property. The temp object is automatically released and reset whenever a new object is returned. The oleid command gives the temp object a name and makes it permanent.

Each control has a specific list of methods, properties and events (for OCX controls). The properties define the way the control is set up. The events are the events that the OCX control can generate. When you create a control, you typically set various properties, and register various events that you want to be notified of. When the control is in use, you retrieve information from the control by either reading the value of its properties, or by receiving event notifications.

wd commands for OLE/OCX controls

oledlg id
Run the OCX property dialog. The state can be saved with the olesave command.

oleenable id eventname [bool]
Enable/disable OCX event. You must enable an event in order to trigger an event in J.

oleget id objectname property
Return value of a property. Objectname is base, temp, or a name set with oleid. If the result is an object, it is set as the temp object. This allows a series of wd commands that use the temp object to get the next object.

oleinfo id
Return information about events, methods, properties, and constants.

oleload id filename
Initialize properties from a file created by olesave. An oleload should only be done once before it is shown.

olemethod id objectname method parameters....
Run a method.

, is an elided parameter. A wd parameter of , is the same as "", except it is treated as an elided parameter where appropriate.

Some methods distinguish between a numeric parameter and a string. A simple (not delimited) string that is an integer is treated as an integer. If you want 23 to be treated as a string, use "23";.

If the result is an object, it is set as the temp object.

An object parameter is indicated by a simple parameter of the form:

A picture object parameter is indicated by a simple parameter of the form:

olesave id filename
Save properties in a file that can be used to initialize a control after it is created.

oleset id objectname property value
Set property value.

An OLE or OCX base object can contain other objects.

For example, many OCX controls contain a Font object that is returned by the font property.

wd 'oleget ocx base font' get font object as temp

wd 'oleget ocx temp fontsize' get font size

wd 'oleget ocx temp fontname' get font name
Times New Roman

wd 'oleset ocx temp Times New Roman;oleset ocx temp fontsize 20' set font

OCX Events
An OCX event is signalled as a button event. For example, form abc, OCX id spin, signals sysevent abc_spin_button. The name sysocx is assigned the OCX event name.

Example: Spinbutton Control
To illustrate these commands, we use the Outrider Systems SPIN32.OCX, a simple control that is ideal for experimentation. We assume you have this control installed on your system.

First try reading the OCX information (if this fails, you do not have the SpinButton installed). This returns a text description of properties, methods and events:

load 'packages\ocx\ocxutil.js' load OCX utilities
ocxinfo 'spin.spinbutton'
NB. event: SpinDown
NB. prototype: void SpinDown ()
NB. help: Occurs when the user clicks one of the arrows...

NB. event: SpinUp

Next, load the spinbutton demo, as follows:

   load 'examples\ocx\misc\spin.js'

Click on the spinbutton to change the text field. Click on the About button to display the about box from Outrider, and the Dialog button to view and change the OCX properties.

Note that to see events from the spinbutton, you use the oleenable command when initializing the form, i.e.

spin_run=: 3 : 0
wd 'oleenable sx spindown'
wd 'oleenable sx spinup'
wd 'pshow;'

The About button invokes the OCX's aboutbox method:

spin_about_button=: 3 : 0
wd 'olemethod sx base aboutbox'

The Dialog button invokes the oledlg command:

spin_dialog_button=: 3 : 0
wd 'oledlg sx'

A press of the spinbutton, invokes the spinbutton handler:

spin_sx_button=: 3 : 0
if. sysocx-:'spinup' do.

This handler checks the value of sysocx and adjusts the text field accordingly.

>>  <<  Ndx  Usr  Pri  JfC  LJ  Phr  Dic  Rel  Voc  !:  wd  Help  User