DLGSETSUB (W*32, W*64)

Dialog Function: Assigns your own callback subroutines to dialog controls and to the dialog box.

Module

USE IFLOGM

Syntax

result = DLGSETSUB (dlg,controlid,value[,index])

dlg

(Input) Derived type dialog. Contains dialog box parameters. The components of the type dialog are defined with the PRIVATE attribute, and cannot be changed or individually accessed by the user.

controlid

(Input) Integer. Specifies the identifier of a control within the dialog box. Can be the symbolic name for the control or the identifier number, both listed in the include (with extension .FD) file, or it can be the identifier of the dialog box.

value

(Input) EXTERNAL. Name of the routine to be called when the callback event occurs.

index

(Input; optional) Integer. Specifies which callback routine is executed when the callback event occurs. Necessary if the control has more than one callback routine.

Results

The result type is LOGICAL(4). The result is .TRUE. if successful; otherwise, .FALSE..

When a callback event occurs (for example, when you select a check box), the callback routine associated with that callback event is called. You use DLGSETSUB to specify the subroutine to be called. All callback routines should have the following interface:

SUBROUTINE callbackname( dlg, control_id, callbacktype)

!DEC$ ATTRIBUTES DEFAULT :: callbackname

callbackname

Is the name of the callback routine.

dlg

Refers to the dialog box and allows the callback to change values of the dialog controls.

control_id

Is the name of the control that caused the callback.

callbacktype

(Input; optional) Integer. Specifies which callback routine is executed when the callback event occurs. Necessary if the control has more than one callback routine.

The control_id and callbacktype parameters let you write a single subroutine that can be used with multiple callbacks from more than one control. Typically, you do this for controls comprising a logical group. You can also associate more than one callback routine with the same control, but you must use then use index parameter to indicate which callback routine to use.

The control_id can also be the identifier of the dialog box. The dialog box supports two callbacktype s, DLG_INIT and DLG_SIZECHANGE. The DLG_INIT callback is executed immediately after the dialog box is created with callbacktypeDLG_INIT, and immediately before the dialog box is destroyed with callbacktypeDLG_DESTROY. DLG_SIZECHANGE is called when the size of a dialog is changed.

Callback routines for a control are called after the value of the control has been updated based on the user's action.

If two or more controls have the same controlid, you cannot use these controls in a DLGSETSUB operation. In this case, the function returns .FALSE..

For more information, see Building Applications: Dialog Callback Routines.

Compatibility

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

Example

PROGRAM DLGPROG

USE IFLOGM

INCLUDE "MYDLG.FD"

TYPE (dialog) mydialog

LOGICAL retlog

INTEGER return

EXTERNAL RADIOSUB

retlog = DLGINIT(IDD_mydlg, dlg)

retlog = DLGSETSUB (mydialog, IDC_RADIO_BUTTON1, RADIOSUB)

retlog = DLGSETSUB (mydialog, IDC_RADIO_BUTTON2, RADIOSUB)

return = DLGMODAL(dlg)

END

SUBROUTINE RADIOSUB( dlg, id, callbacktype )

!DEC$ ATTRIBUTES DEFAULT :: callbackname

USE IFLOGM

TYPE (dialog) dlg

INTEGER id, callbacktype

INCLUDE 'MYDLG.FD'

CHARACTER(256) text

INTEGER cel, far, retint

LOGICAL retlog

SELECT CASE (id)

CASE (IDC_RADIO_BUTTON1)

! Radio button 1 selected by user so

! change text accordingly

text = 'Statistics Package A'

retlog = DLGSET( dlg, IDC_STATICTEXT1, text )

CASE (IDC_RADIO_BUTTON2)

! Radio button 2 selected by user so

! change text accordingly

text = 'Statistics Package B'

retlog = DLGSET( dlg, IDC_STATICTEXT1, text )

END SELECT

END SUBROUTINE RADIOSUB

See Also