This document covers the following topics:
Dialog elements are uniquely identified by a handle. A handle is a binary value that is
returned when a dialog element is created. A handle must be defined in a DEFINE DATA
statement of the
dialog.
by creating a dialog or a dialog element with the dialog editor; in this case, the handle definition is generated;
by explicitly entering the definition in a global, local, or parameter data area of the dialog;
by explicitly entering the definition in a subprogram or a subroutine.
Note
Handles of ActiveX controls are defined in a slightly different way than the standard
handle definition described below. This is described in Working with ActiveX
Controls.
A handle is defined inside a DEFINE
DATA
statement in the following way:
level
handle-name
[(array-defintion)] HANDLE
OF
dialog-element-type
|
Handles may be defined on any level.
Handle-name is the name to be assigned to the handle; the naming conventions for user-defined variables apply.
Dialog-element-type is the type of dialog element. Its possible
values are the values of the TYPE
attribute. It may not be redefined and
not be contained in a redefinition of a group.
Examples:
1 #SAVEAS-MENUITEM HANDLE OF MENUITEM 1 #OK-BUTTON (1:10) HANDLE OF PUSHBUTTON
When you have defined a handle, you can use the handle-name with handle attribute operands in those Natural statements where an operand may be specified. With handle attribute operands, you can, for example, dynamically query, set, or modify attribute values for the defined dialog-element-type. This is the most important programming technique in the dialog editor. For details, see the section How To Manipulate Dialog Elements.
If there is a dialog element handle of the same name in two different dialogs, the
PARENT
attribute ensures that Natural knows
the difference between the two handles (two different
PARENT
values). Handles may be passed as parameters or
may be assigned from one handle variable to another.
In addition to the handle types referring to one dialog element, the generic handle type
HANDLE OF GUI
is available. In event-handler code, you can use HANDLE
OF GUI
to refer to the handle of any type of dialog element.
This can be useful, for example, if you are querying an attribute value in all dialog elements on one level: you go through the dialog elements one after the other; in the course of this query, it is not clear which type of dialog element is going to be queried next. Then a GUI handle makes it possible to query the next dialog element regardless of its type. This saves a lot of coding, because otherwise, you would have to query the attribute's value of each dialog element separately.
Example:
... 1 #CONTROL HANDLE OF GUI ... #CONTROL := #DLG$WINDOW.FIRST-CHILD REPEAT UNTIL #CONTROL = NULL-HANDLE ... #CONTROL := #CONTROL.SUCCESSOR END-REPEAT
The HANDLE
constant NULL-HANDLE
may be used to query, set or
modify a NULL
value of a HANDLE
. Such a NULL
value
means that the dialog element is nonexistent (even if it has been created explicitly).
Example:
DEFINE DATA PARAMETER 1 #PUSH HANDLE OF PUSHBUTTON END-DEFINE ... IF #PUSH = NULL-HANDLE ...
The HANDLE
constant NULL-HANDLE
represents the
NULL
value of a HANDLE
variable or of an attribute with format
HANDLE
. For handle variables, the value indicates that the expression
handle.attribute refers to the global attribute list. For
attributes, this value indicates that no value is currently set.