Adding a Mask to an Xdialog Field
If you would like to add a mask that formats a field, the following script provides a template. The mask is applied when the user changes focus from (or leaves) the text field.
Set the phone field event to pass all events, not just the change event.
dim i as N dim char as C dim temp as C ui_dlg_box("Mask Example",<<%dlg% ; Telephone Number |[.20phone!phone_event_*]
The OK button closes the dialog box.
; %dlg%, <<%code% if a_dlg_button = "OK" then ' exit end if
When the phone field loses focus, strip out the non-numeric characters.
if a_dlg_button = "phone_event_killfocus" then char = "" for i = 1 to len(phone) char = substr(phone,i,1) if char >= "0" .and. char <= "9" temp = temp + char end if next i
This part is totally customizable. I decided that the phone number had to be at least 7 characters long and that the area code would be surrounded by parentheses. The local exchange number would be separated from the house number by a hyphen.
If len(temp) >= 7 .and. len(temp) <= 10 phone = "(" + left(temp,3) + ")" + substr(temp, 4, 3) + "-" + substr(temp, 7, 4) end if If len(temp) > 10 phone = phone + " x" + right(temp, len(temp) - 10) end if ui_dlg_refresh("Mask Example") a_dlg_button = "" else a_dlg_button = "" end if %code%)