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 = ""
    a_dlg_button = ""
end if

See Also