Example Programs |
|
This page provides examples to illustrate the creation and implementation of PxPlus graphical controls and display objects.
The example below demonstrates the use of PxPlus Control Objects. It draws a new window within the PxPlus console and then creates several interactive controls within that window. At run time, a message on the right will display the CTL value assigned to each control selected via the mouse.
! Sample graphical user interface program
! Create window and populate with controls
PRINT 'DIALOGUE'(10,10,80,25,"Simple Graphical Controls Example",OPT="*-mXM"),'B?','SR','CS',
PRINT 'FONT'("Arial,1,I"),'DF',
MENU_BAR 100,"-[&File,&Edit],F:[&Open=901,&Save=902,&Quit=4],E:[&Add=903,&Delete=904]"
BUTTON 101,@(3,1,10,2)="&Button",TIP="Push the button"
PRINT 'PEN'(1,1,"Dark Blue"),'FILL'(0,0),;
PRINT 'RECTANGLE'(@X(2),@Y(3.5),@X(23.5),@Y(9),20),
RADIO_BUTTON 102:1,@(3,4,20,1.5)="Radio Button 1",FNT="Arial,1"
RADIO_BUTTON 102:2,@(3,5.5,20,1.5)="Radio Button 2",FNT="Arial,1"
RADIO_BUTTON 102:3,@(3,7,20,1.5)="Radio Button 3",FNT="Arial,1"
RADIO_BUTTON ON 102:1 ! Turn the default button on
CHECK_BOX 103,@(3,9.5,20,1)="Check box",FNT="Arial,1"
PRINT 'PEN'(1,2,0),'LINE'(@X(2),@Y(11.5),@X(23.5),@Y(11.5)),
PRINT 'TEXT'(@X(3),@Y(12.5),"Double click to select:"),
LIST_BOX 104,@(3,14,20,6);
LIST_BOX SET_FOCUS 104,204 ! set alternate CTL for focus
LIST_BOX LOAD 104,"Line 1/Line 2/Line 3/Line 4/Line 5/"
LIST_BOX WRITE 104,1
PRINT 'TEXT'(@X(3),@Y(19.5),@X(20),@Y(22),"Type some text and press <ENTER>:","W"),
PRINT 'PEN'(1,3,"RGB: 100 200 200"),'LINE'(@X(26),0,@X(26),@Y(25)),
MULTI_LINE 105,@(3,22,20,1);
MULTI_LINE SET_FOCUS 105,205 ! set alternate CTL for focus
! Initialize CtlMsg$="",Event$=""
Lo_CTL=101,Hi_CTL=105,Current_ID=Lo_CTL;
SET_FOCUS Current_ID ! init focus
! Event Loop
WHILE 1
SET_FOCUS READ x;
IF x \
THEN Current_ID=x \
ELSE SET_FOCUS Current_ID ! Keep focus on the controls
OBTAIN (0,SIZ=1)'ME',*,'MN';
TheCTL=CTL
IF TheCTL=4 OR TheCTL=-1999 \
THEN BREAK ! Exit the loop by pressing F4 or X in top corner of window
CtlMsg$="Ctl Value: "+STR(TheCTL),Event$=""
SWITCH TheCTL
CASE 101 ! Button
Event$="The button has been pressed"
BREAK
CASE 102 ! Radio button
RADIO_BUTTON READ 102,SUB_ID
CtlMsg$="Ctl Value: "+STR(TheCTL)+" Sub_ID: "+STR(SUB_ID)
Event$="A radio button has been selected"
BREAK
CASE 103 ! Checkbox
Event$="The check box has been clicked"
BREAK
CASE 104 ! Listbox
LIST_BOX READ 104,x$,mode$
IF mode$=$02$ \
THEN Event$=x$+" has been selected from the list box" ! Select only by double click
BREAK
CASE 105 ! Multiline
MULTI_LINE READ 105,x$
Event$="'"+x$+"' has been typed into the multiline"
BREAK
CASE 204,205 ! Keep track when focus is on a listbox or multiline
Current_ID=TheCTL-100
BREAK
CASE 901,902,903,904
x=TheCTL-900;
MenuFunc$=TBL(x,"Unknown","Open","Save","Add","Delete")
Event$="'"+MenuFunc$+"' has been selected from the menu"
BREAK
CASE -1015 ! Tab forward
Current_ID++;
IF Current_ID>Hi_CTL \
THEN Current_ID=Lo_CTL
SET_FOCUS Current_ID
BREAK
CASE -1016 ! Shift-Tab backward
Current_ID--;
IF Current_ID<Lo_CTL \
THEN Current_ID=Hi_CTL
SET_FOCUS Current_ID
BREAK
DEFAULT
Event$=""
END SWITCH
PRINT @(30,12),CtlMsg$,'CL',@(30,13),"Focus:",Current_ID,'CL',@(30,14),Event$,'CL',
WEND
END
The example below is a simple form input program.
BEGIN
PRINT 'DIALOGUE'(0,0,33,15,"Input Form",'B?'+'FONT'("Arial,1")), \
'SR','CS',
PRINT 'CURSOR'("OFF"),
PRINT 'TEXT'(@X(2),@Y(3),"First Name:"),
PRINT 'TEXT'(@X(2),@Y(5),"Last Name:"),
PRINT 'TEXT'(@X(2),@Y(7),"Address:"),
PRINT 'TEXT'(@X(2),@Y(9),"City:"),
MULTI_LINE 100,@(15,3,15,1),LEN=15,OPT="",ERR=*NEXT
MULTI_LINE 200,@(15,5,15,1),LEN=15,OPT="",ERR=*NEXT
MULTI_LINE 300,@(15,7,15,1),LEN=15,OPT="",ERR=*NEXT
MULTI_LINE 400,@(15,9,15,1),LEN=15,OPT="",ERR=*NEXT
BUTTON 500,@(15,11,6,2)="&Save"
BUTTON 600,@(24,11,6,2)="&Done"
SET_FOCUS 100
tab_list$="100200300400"
!
WHILE 1
OBTAIN (0)'ME',invar$,'MN';
got_ctl=CTL,got_eom$=EOM
SWITCH got_ctl
CASE 4,600,-1999;
EXITTO DONE
CASE -1015;
tab_list$=tab_list$(4)+tab_list$(1,3);
SET_FOCUS NUM(tab_list$(1,3));
BREAK
CASE -1016;
tab_list$=MID(tab_list$,-3)+tab_list$(1,LEN(tab_list$)-3);
SET_FOCUS NUM(tab_list$(1,3));
BREAK
CASE 500;
GOSUB SAVE_ROUTINE;
BREAK
END SWITCH
WEND
!
DONE:
MULTI_LINE REMOVE 100
MULTI_LINE REMOVE 200
MULTI_LINE REMOVE 300
MULTI_LINE REMOVE 400
BUTTON REMOVE 500
BUTTON REMOVE 600
PRINT 'CS',
END
!
SAVE_ROUTINE:
MULTI_LINE READ 100,first$
MULTI_LINE READ 200,last$
MULTI_LINE READ 300,address$
MULTI_LINE READ 400,city$
MSGBOX "Saving: "+SEP+"First: "+first$+SEP+"Last: "+last$+SEP+ \
"Addr: "+address$+SEP+"City: "+city$
RETURN