Trapping the Change Event
Description
Alpha Anywhere automatically generates an event when a button on a dialog is pushed. In addition to the button push event, it is often necessary to generate an event when the value in a control on a dialog box changes. To do this, you specify the name of the event in the syntax for the control. The syntax for generating a change event for a control is:
[control_definition!event_name]
If you also want to make the control conditional, then the syntax is:
[control_definition!event_name?conditional_flag]
where control_definition is the syntax that defines the control, and event_name is the name of the event that is generated when the variable in the control changes. If conditional_flag is .F., the control is disabled. For example, the following syntax places a text box on a dialog. When the value in the text box changes (i.e. when the value in variable1 changes) an event called value_changed is generated:
[.30variable1!value_changed]
The following script prompts for a user's name and address and then displays a text box showing the address in a mailing label format.
result = ui_dlg_box("Enter Name and Address",<<%dlg%
{ysize=2}
{region}
Firstname: |[.20fname!change] Lastname: [.20lname!change];
Addresss: |[.40address1!change];
{sp}|[.40address2!change];
City: |[.20city!change] State: [.5state!change] Zip: [.10zip!change];
{endregion};
{lf};
{frame=1,1:Address:}
{region}
{text=40,4address_txt}
{endregion};
{region}
<15&Close>
{endregion}
%dlg%,<<%code%
if a_dlg_button = "change" then
a_dlg_button = ""
address_txt = alltrim(fname)+" "+alltrim(lname)
address_txt = address_txt+crlf()+address1
if address2 <> "" then
address_txt = address_txt+crlf()+address2
end if
if city+state+zip <> ""
citystzip = alltrim(city)+", "+alltrim(state)+ " "+zip
address_txt = address_txt+crlf()+ citystzip
end if
end if
if a_dlg_button = "&Close" then
if address_txt <> "" then
a_dlg_button = address_txt
end if
end if
%code%)
if result <> "&Close" then
ui_msg_box("Address",result)
end ifThe script creates this dialog:
By including the directive '!change' in the definition of each text box in the above script, we have specified that Alpha Anywhere will generate an event (called 'change' ) whenever the value in any of the text boxes is changed by the user. The code starting with the line if a_dlg_button = "change" then is where the 'change' event is handled. Every time the user changes a value in any of the text boxes on the dialog, the script computes the address_txt variable and displays it on the dialog (using the {text} command). When the user presses the Close button, the address_txt variable is assigned to the a_dlg_button variable (as long as address_txt is not NULL). If a_dlg_button is set to a non-null value when the event processing script ends, the dialog closes and the UI_DLG_BOX()function returns the value of a_dlg_button. Since the event handler for the '&Close' event sets a_dlg_button to address_txt, the dialog closes, and sets 'result' to address_txt.
Limitations
Desktop applications only
See Also
