Creating a Genie Dialog Box
Description
This next example shows how a "genie" dialog can be created.
Below is the script to produce this genie. The script is quite long, but do not let its length intimidate you. It is actually quite simple. One key aspect of the script is the use of functions defined within the script to help make the code more readable. Notice that near the top of the script we execute the command:
vl = local_variables()
This command creates a pointer to all of the local variables in the script. We pass this pointer in to all of the functions that we call in the script. By doing this, the function can see and set local variables in the script.
page = 1 max_pages = 3 'flag controls if you can move off the current genie page. dim genie_stay as L genie_stay = .f. dim error_message as C 'error message if you try to move off the current page when all 'conditions have not been met. error_message = "" vl = local_variables() define_pages(vl) set_flags(vl) ui_dlg_box("Genie",<<%dlg% {startup=init} {region0} {region1} {wrap=20}; This script demonstrates an approach to designing a Genie with Xdialog, using Embedded Dialog boxes.; {lf}; The text in this region will appear on all Genie pages.; {lf}; {image=group} {endregion1}|{sp}| {frame=1,1} {region3} {embedded=60,15genie} {endregion3}; {region} {endregion}; {endregion0}; {region} {justify=right}<15&Cancel> <15<&Previous!previous?flag_previous> <15&Next\>!next?flag_next> <15&Finish?flag_finish> {endregion} %dlg%, <<%code% if a_dlg_button = "finish" then end if if a_dlg_button = "init" then a_dlg_button = "" show_page(vl,1) end if if a_dlg_button = "next" then a_dlg_button = "" page = page + 1 if page > max_pages then page = max_pages end if show_page(vl,page) end if if a_dlg_button = "previous" then a_dlg_button = "" page = page - 1 if page < 1 then page = 1 end if show_page(vl,page) end if %code%) function show_page as C (vars as P, page as N ) with vars if genie_stay = .f. then temp_code = eval("page_"+page) evaluate_template(temp_code) set_flags(vl) else ui_msg_box("Error",error_message,UI_STOP_SYMBOL) end if end with end function function define_pages as C (vars as P) with vars page_1 = <<%dlg2% ui_modeless_dlg_box("genie",<<%dlg% {cellspillover=on} {lf}; Welcome to the Xdialog genie.; {lf}; Press the Next button below to get started.; %dlg%,<<%code% 1=1 %code%) %dlg2% page_2 = <<%dlg2% ui_modeless_dlg_box("genie",<<%dlg% {cellspillover=on} Enter your name:; {lf}; {lf}; Firstname: | .30fname; {lf}; Lastname: | .30lname; %dlg%,<<%code% 1=1 %code%) %dlg2% page_3 = <<%dlg2% ui_modeless_dlg_box("genie",<<%dlg% {cellspillover=on} Enter your age:; {lf}; {lf}; Age: | .30age; {lf}; %dlg%,<<%code% 1=1 %code%) %dlg2% end with end function function set_flags as C (vars as P) with vars if page = max_pages flag_finish = .t. flag_next = .f. flag_finish = .t. flag_previous = .t. else if page = 1 then flag_next = .t. flag_previous = .f. flag_finish = .f. else flag_next = .t. flag_previous = .t. flag_finish = .f. end if end with end function
Limitations
Desktop applications only.
See Also