Appendix A
Corel® PerfectScript Examples
8039
APPLICATION(A1; "WordPerfect"; Default; "US")
// Extract "Perfect" from WordPerfect and test if "program" was typed
// Demonstrate STRPOS and SUBSTR commands
vNumbers := ""
LABEL(Start)
AND STRPOS EXAMPLES")
IF(vStr = "")
BEEP
MESSAGEBOX(x; "ERROR"; "You pressed return
without entering any text"; IconStop!)
GO(Start)
ENDIF
vSub := SUBSTR(vStr; 5; 7)
IF(vSub = "Perfect")
MESSAGEBOX(x; "SUBSTR EXAMPLE"; "WordPerfect
is simply """ + vSub + """"; IconInformation!)
IF(STRPOS(vStr; "program") = 0)
BEEP
MESSAGEBOX(x; "STRPOS EXAMPLE"; "You entered
ENDIF
ELSE
BEEP
MESSAGEBOX(x; "ERROR"; """WordPerfect"" wasn't
the first word"; IconExclamation!)
GO(Start)
ENDIF
8040
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate TOLOWER and VARERRCHK command
HdReturn := NTOC(0F90Ah)
VARERRCHK(Off!)
FOR(x; 65; x 91; x + 1)
// convert uppercase character to lowercase
// vLongStr not declared - no value assigned
vLongStr := vLongStr + TOLOWER(NTOC(x)) + NTOC(32)
ENDFOR
MESSAGEBOX(x; "VARERRCHK and TOLOWER"; "With VARERRCHK(On!), you would
receive a run-time error message." + HdReturn + HdReturn + "vLongStr: "
+ vLongStr + HdReturn; IconInformation!)
8041
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate UNITSTR and DIALOG commands
vNmbr := 1
vStatus := 4
DIALOGDEFINE(1000; 50; 50; 100; 120; Percent! | NoTitle!| NoFrame!; "")
DIALOGADDTEXT(1000; -1; 10; 15; 75; 15; Left!; "Convert " + vNmbr + " inch
to:")
DIALOGADDCHECKBOX(1000; 101; 15; 30; 100; 13; "Centimeters"; vCB1)
DIALOGADDCHECKBOX(1000; 102; 15; 45; 100; 13; "Millimeters"; vCB2)
DIALOGADDCHECKBOX(1000; 103; 15; 60; 100; 13; "Points"; vCB3)
DIALOGADDCHECKBOX(1000; 104; 15; 75; 100; 13; "WP Units"; vCB4)
DIALOGADDTEXT(1000; -2; 10; 100; 100; 15; Left!; "(Press Alt+F4 to cancel)")
DIALOGSHOW(1000; -1; Msg)
WHILE(vStatus = 4)
ENDWHILE
DIALOGDESTROY(1000)
LABEL(Msg)
IF(Msg[5] = 274)
BEEP
vStatus := 2
ENDIF
DEFAULTUNITS(Inches!)
SWITCH(Msg[3])
CASEOF 101: vResult := UNITSTR(vNmbr; Centimeters!)
Message
CASEOF 102: vResult := UNITSTR(vNmbr; Millimeters!)
Message
CASEOF 103: vResult := UNITSTR(vNmbr; Points!)
Message
CASEOF 104: vResult := UNITSTR(vNmbr; WPUnits!)
Message
ENDSWITCH
RETURN
LABEL(Message)
DIALOGUNDISPLAY(1000; "CancelBttn")
MESSAGEBOX(vStatus; "UNITSTR COMMAND"; vNmbr + " inch is converted to "
+ vResult; IconInformation! | RetryCancel!)
IF(vStatus = 4)
DIALOGSHOW(1000; -1; Msg)
ELSE
BEEP
ENDIF
RETURN
8042
// There are two macros in this example
// Compile separately: name the first MACROLIB.WCM
// A Warning Error displayed when macros compiled for the first time
//For each warning, choose Continue Compilation.
// Demonstrate USE command
APPLICATION(A1; "WordPerfect"; Default; "US")
FUNCTION GetMsgBoxResult(x)
VARERRCHK(Off!)
BEEP
SWITCH(x)
CASEOF 1:MESSAGEBOX(vChoice; "Macro File Library";
"Choose a button to dismiss the message box"; IconStop! | AbortRetryIgnore!)
CASEOF 2:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to
dismiss the message box"; IconStop! | Ok!)
CASEOF 3:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to
dismiss the message box"; IconStop! | OkCancel!)
CASEOF 4:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to
dismiss the message box"; IconStop! | RetryCancel!)
CASEOF 5:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to
dismiss the message box"; IconStop! | YesNo!)
CASEOF 6:MESSAGEBOX(vChoice; "Macro File Library"; "Choose a button to
dismiss the message box"; IconStop! | YesNoCancel!)
ENDSWITCH
RETURN(vChoice)
ENDFUNC
PROCEDURE DisplayMsgBoxResult(x)
MESSAGEBOX(x; "Macro File Library"; "You chose the """ + x + """ button";
IconInformation!)
ENDPROC
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate USE command
VARERRCHK(Off!)
// replace default macros directory if necessary
USE("c:\prwin\macros\macrolib.wcm")
REPEAT
MENU(vResult; Digit; ; ; {"AbortRetryIgnore!"; "OK!"; "OKCancel!"; "RetryCancel!";
"YesNo!"; "YesNoCancel"; "Quit"})
SWITCH(GetMsgBoxResult(vResult))
CASEOF 1: vStatus = "OK"
CASEOF 2: vStatus = "Cancel"
CASEOF 3: vStatus = "Abort"
CASEOF 4: vStatus = "Retry"
CASEOF 5: vStatus = "Ignore"
CASEOF 6: vStatus = "Yes"
CASEOF 7: vStatus = "No"
ENDSWITCH
IF(NOT(vResult = 7))
DisplayMsgBoxResult(vStatus)
ENDIF
UNTIL(vResult = 7)
8043
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDCHECKBOX, DIALOGADDCOLORWHEEL, DIALOGADDCOMBOBOX
// and DIALOGADDCOUNTER
CALL(DlgCreate)
REPEAT
MENU(vResult; Digit; ; ; {"Check box"; "Color wheel"; "Combination box";
"Counter"; "Quit"})
DisplayControls
UNTIL(vResult = 5)
CALL(QuitMacro)
LABEL(DisplayControls)
x := 0
SWITCH(vResult)
CASEOF 1: DIALOGSHOW(1000; 100; Msg)
WHILE(x = 0)
ENDWHILE
CASEOF 2: DIALOGSHOW(1001; 1)
vRed := vCW % 256
vGreen := vCW / 256 % 256
vBlue := vCW / 256 / 256
DisplayColorValues(vRed; vGreen; vBlue)
CASEOF 3: DIALOGSHOW(1002; 100)
CASEOF 4: DIALOGSHOW(1003; 100)
ENDSWITCH
RETURN
LABEL(Msg)
IF(Msg[5] = 274)
DIALOGUNDISPLAY(1000; "CancelBttn")
x := 1
ENDIF
SWITCH(Msg[3])
CASEOF 100:
DIALOGUNDISPLAY(1000; "CancelBttn")
MESSAGEBOX(x; "SEE WHAT YOU CAN DO"; "This
ENDSWITCH
RETURN
PROCEDURE DisplayColorValues(r; g; b)
MESSAGEBOX(x; "COLOR VALUES"; "The red component equals " + r
+ ". The green component equals " + g + ". The blue component equals "
+ b + "."; IconInformation!)
ENDPROC
LABEL(DlgCreate)
DIALOGDEFINE (1000; 50; 50; 120; 50; Percent! | NoFrame!; "DIALOGADDCHECKBOX")
DIALOGADDCHECKBOX(1000; 100; 10; 10; 100; 15; "Click check box"; vCB)
DIALOGDEFINE (1001; 50; 50; 125; 130; Percent! | NoFrame! | OK!; "DIALOGADDCOLORWHEEL")
DIALOGADDCOLORWHEEL(1001; 101; 10; 10; 105; 80; vCW)
DIALOGDEFINE (1002; 50; 50; 125; 115; Percent! | NoFrame!; "DIALOGADDCOMBOBOX")
DIALOGADDCOMBOBOX(1002; 100; 10; 10; 100; 50; DropDown!; var)
DIALOGADDLISTITEM(1002; 100; "DropDown! combo box")
DIALOGADDCOMBOBOX(1002; 101; 10; 40; 100; 50; Simple!; var)
DIALOGADDLISTITEM(1002; 101; "Simple! combo box")
DIALOGDEFINE (1003; 50; 50; 120; 50; Percent! | NoFrame!; "DIALOGADDCOUNTER")
var := 5
DIALOGADDCOUNTER(1003; 100; 10; 10; 50; 15; 0; var; 1; 10; 1)
RETURN
LABEL(QuitMacro)
FORNEXT(x; 1000; 4; 1)
DIALOGDESTROY(x)
ENDFOR
QUIT
8044
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDCONTROL and SENDKEYS commands
InhibitInput(Off!)
WM_SYSCOMMAND := 274
z := 0
DIALOGDEFINE (1000; 50; 50; 122; 150; Percent! | NoFrame! | OK!; "DIALOGADDCONTROL")
DIALOGADDCHECKBOX(1000; 100; 10; 10; 75; 15; "Check for demo"; vCB)
DIALOGADDCONTROL(1000; 101; 10; 40; 100; 75; "wpnslb20"; 2; ""; vListItem;
0)
A := "Apple"
B := "Apple pie"
C := "Applesauce"
D := "Banana"
E := "Banana oil"Example Level = F := "Banana seat"
G := "Banana split"
FORNEXT(x; 65; 71; 1)
DIALOGADDLISTITEM(1000; 101; INDIRECT(NTOC(x)))
ENDFOR
DIALOGSHOW(1000; 101; Msg)
WHILE(z = 0)
ENDWHILE
DIALOGDESTROY(1000)
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
z := 1
ENDIF
SWITCH(Msg[3])
CASEOF 100: Demo
CASEOF "OKBttn": DIALOGUNDISPLAY(1000; 101)
IF(STRLEN(vListItem) 0)
ASSIGN(vSelect; "You selected """ + vListItem
+ """ from the list box")
ELSE
ASSIGN(vSelect; "You didn't select an item
from the list box")
ENDIF
MESSAGEBOX(x; "LIST ITEM"; vSelect; IconInformation!)
z := 1
ENDSWITCH
RETURN
LABEL(Demo)
SENDKEYS WAIT("{Tab} {Up}")
FOREACH(vLetter; {"A"; "p"; "p"; "l"; "e"; "s"; "a"; "u"; "c"; "e"})
SENDKEYS WAIT(vLetter)
WAIT(3)
ENDFOR
WAIT(12)
FORNEXT(w; 1; 10; 1)
SENDKEYS WAIT("{BackSpace}")
WAIT(1)
ENDFOR
WAIT(10)
FOREACH(vLetter; {"B"; "a"; "n"; "a"; "n"; "a"; " "; "s"; "p"; "l"; "i";
"t"})
SENDKEYS WAIT(vLetter)
WAIT(3)
ENDFOR
WAIT(12)
SENDKEYS WAIT("{Tab}")
MESSAGEBOX(x; "NAME SEARCH LIST BOX";
"Enter a word from the list to experiment with WordPerfect's custom list
box")
SENDKEYS WAIT("{Up}")
RETURN
8045
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDHOTSPOT and DIALOGADDICON
VARERRCHK(Off!)
Yes := 6
WM_SYSCOMMAND := 274
DialogControl := 3
DIALOGDEFINE (1000; 50; 50; 115; 85; Percent! | NoFrame!; "DIALOGADDICON"
)
DIALOGADDTEXT(1000; -1; 10; 10; 50; 13; Left!; "Click an icon:")
FORNEXT(z; 1; 3; 1)
DIALOGADDICON (1000; 0; 25; z + 10 + (z * 13); 10; 8; "#" + (z+159); 0)
DIALOGADDHOTSPOT(1000; z; 25; z + 10 + (z * 13); 10; 8; Click!)
ENDFOR
DIALOGSHOW(1000; 0; Msg)
WHILE(NOT(vStatus = Yes))
ENDWHILE
DIALOGDESTROY (1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
vStatus = Yes
ENDIF
SWITCH(Msg[DialogControl])
CASEOF 1: MESSAGEBOX(vStatus; "DIALOGADDHOTSPOT";
CASEOF 2:MESSAGEBOX(vStatus; "DIALOGADDHOTSPOT";
CASEOF 3:MESSAGEBOX(vStatus; "DIALOGADDHOTSPOT";
ENDSWITCH
RETURN
8046
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDFILENAMEBOX, DIALOGADDEDITBOX, and DIALOGADDVIEWER
VARERRCHK(Off!)
ASSIGN(vText; "Note that DIALOGDEFINE uses Enter2HRtn! style with this
edit box control.")
DIALOGDEFINE (1000; 50; 50; 195; 225; OK! | Percent! | Enter2HRtn!; "DIALOGADDCONTROL")
DIALOGADDTEXT(1000; -1; 10; 10; 100; 15; Left!; "DIALOGADDFILENAMEBOX")
DIALOGADDFILENAMEBOX(1000; 100; 10; 20; 170; 15; FilesAndDirs!; vDir; "c:\")
DIALOGADDTEXT(1000; -2; 10; 40; 100; 15; Left!; "DIALOGADDEDITBOX")
DIALOGADDEDITBOX(1000; 101; 10; 50; 170; 50; Left! | Multiline! | WordWrap!
| VScroll!; vText; 1000)
DIALOGADDTEXT(1000; -3; 10; 105; 100; 15; Left!; "DIALOGADDVIEWER")
DIALOGADDVIEWER(1000; 102; 10; 115; 170; 60; "C:\AUTOEXEC.BAT")
DIALOGSHOW(1000; 100)
DIALOGDESTROY(1000)
IF(STRLEN(vDir) = 0)
Msg("You did not enter a path or filename")
ELSE
MESSAGEBOX(x; "DIALOGADDFILENAMEBOX";
"You entered the following path or path and filename: " + vDir)
ENDIF
IF(STRLEN(vText) = 0)
Msg("You did not enter text in the edit control")
ELSE
MESSAGEBOX(x; "DIALOGADDEDITBOX"; "You entered the following text in the
edit control: " + NTOC(0F90Ah) + NTOC(0F90Ah) + vText)
ENDIF
PROCEDURE Msg(x)
BEEP
MESSAGEBOX(x; "Oops!"; x; IconExclamation!)
ENDPROC
8047
APPLICATION(A1; "WordPerfect"; Default; "US")
// Use array SortStr to sort up to eight character strings by length
// Calculate width of dialog box from longest string and height from the
number of strings
// Demonstrate DIALOGADDFRAME command
CALL(GetNumberAndStrings)
CALL(GetDimensions)
CALL(DisplaySortedStrings)
LABEL(GetNumberAndStrings)
GETNUMBER(vNmbr; "Number of strings to sort (up to eight):"; "FRAME EXAMPLE")
IF(vNmbr 8)
vNmbr := 8
ENDIF
DECLARE StrSort[vNmbr]
FORNEXT(x; 1; vNmbr; 1)
GETSTRING(StrSort[x]; "String " + x + ":";
"SORT " + vNmbr + " STRINGS"; 50)
ENDFOR
RETURN
LABEL(GetDimensions)
vSorted := 1
WHILE(vSorted = 1)
vSorted := 0
FOR(x; 1; x vNmbr; x + 1)
IF(STRLEN(StrSort[x]) STRLEN(StrSort[x + 1]))
vTemp := StrSort[x]
StrSort[x] := StrSort[x + 1]
StrSort[x + 1] := vTemp
vSorted := 1
ENDIF
ENDFOR
ENDWHILE
x := 20
y := 20
w := STRLEN(StrSort[1]) + (STRLEN(StrSort[1]) * 4)
h := 13
RETURN
LABEL(DisplaySortedStrings)
DIALOGDEFINE(1000; 50; 50; w + 45; 40 + 30 * vNmbr; Percent!; "FRAME CONTROL")
FORNEXT(r; 1; vNmbr; 1)
DIALOGADDFRAME(1000; r; x - 5; y - 5 + (r
* 30) - 30; w + 10; h + 7; Frame! | Gray!)
DIALOGADDTEXT(1000; 0; x; y + (r * 30) -
30; w; h; Center!; TOUPPER(StrSort[r]))
ENDFOR
DIALOGSHOW(1000; 1)
DIALOGDESTROY(1000)
QUIT
8048
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate group controls and buttons
VARERRCHK(Off!)
DIALOGDEFINE(1000; 50; 50; 200; 140; Percent!; "GROUP CONTROLS AND BUTTONS")
DIALOGADDGROUPBOX(1000; -1; 10; 10; 75; 55; "Radio Buttons")
DIALOGADDRADIOBUTTON(1000; 100; 25; 25; 50; 15; "Example 1"; vRadio1)
DIALOGADDRADIOBUTTON(1000; 101; 25; 45; 50; 15; "Example 2"; vRadio2)
DIALOGADDVLINE(1000; -2; 125; 15; 55)
DIALOGADDPOPUPBUTTON(1000; 102; 135; 35; 50; 13; vPopup)
DIALOGADDLISTITEM(1000; 102; "Popup 1")
DIALOGADDLISTITEM(1000; 102; "Popup 2")
DIALOGADDLISTITEM(1000; 102; "Popup 3")
DIALOGADDHLINE(1000; -3; 10; 85; 175)
DIALOGADDPUSHBUTTON(1000; 103; 15; 95; 165; 13; DefaultBttn!; "Cancel")
DIALOGSHOW(1000; 103)
IF(vRadio1 0)
vMessage := "You selected radio button 1. "
ELSE
IF(vRadio2 0)
vMessage := "You selected radio button 2. "
ELSE
vMessage := "You didn't select a radio button. "
ENDIF
ENDIF
vMessage := vMessage + "You selected " + vPopup + ". "
IF(MacroDialogResult = 103)
vMessage := vMessage + "You chose Cancel to close the dialog box."
MESSAGEBOX(x; "MESSAGE BOX"; vMessage; IconInformation!)
ELSE
BEEP
MESSAGEBOX(x; "MESSAGE BOX"; "You chose a system command to close the dialog
box"; IconExclamation!)
ENDIF
DIALOGDESTROY(1000)
8049
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDLISTBOX and DIALOGADDLISTITEM
DECLARE Fruit[5]
y := 10
DIALOGDEFINE(1000; 50; 50; 122; 155; OK! | Percent! | NoFrame!; "SORTED
LIST BOX")
FOREACH(vList; {"Apples"; "Oranges"; "Bananas"; "Grapes"; "Pears"})
DIALOGADDTEXT(1000; 0; 10; y; 30; 15; Left!; vList)
DIALOGADDHOTSPOT(1000; y; 10; y; 30; 9; Click!)
FRUIT[y/10] := vList
y := y + 10
ENDFOR
DIALOGADDLISTBOX(1000; 103; 50; 10; 60; 50; Sorted!; vChoice)
DIALOGADDTEXT(1000; 0; 10; 75; 102; 35; Left! | RecessBox!;
"Click a ""fruit"" to display in the list box. Click a list box item and
choose OK when finished.")
DIALOGSHOW(1000; 102; Msg)
Stop := 0
WHILE(Stop = 0)
ENDWHILE
DIALOGDESTROY(1000)
IF(vChoice = "")
vMessage := "You didn't select a list box item " + vChoice
ELSE
vMessage := "You selected " + vChoice
ENDIF
MESSAGEBOX(x; "LIST BOX CHOICE"; vMessage; IconInformation!)
QUIT
LABEL(Msg)
IF(Msg[5] = 274)
Stop := 1
ENDIF
SWITCH(Msg[3])
CASEOF 10: DIALOGADDLISTITEM(1000; 103; Fruit[1])
CASEOF 20: DIALOGADDLISTITEM(1000; 103; Fruit[2])
CASEOF 30: DIALOGADDLISTITEM(1000; 103; Fruit[3])
CASEOF 40: DIALOGADDLISTITEM(1000; 103; Fruit[4])
CASEOF 50: DIALOGADDLISTITEM(1000; 103; Fruit[5])
CASEOF "OKBttn":
DIALOGUNDISPLAY(1000; "OKBttn")
Stop := 1
ENDSWITCH
RETURN
8050
APPLICATION(A1; "WordPerfect"; Default; "US")
// Demonstrate DIALOGADDSCROLLBAR command with callback function
SB_LINEUP := 0
SB_LINEDOWN := 1
WM_SYSCOMMAND := 274
WM_HSCROLL := 276
DIALOGDEFINE(1000; 50; 50; 125; 70; Percent!; "SCROLL BAR")
DIALOGADDTEXT(1000; -1; 10; 10; 100; 15; Center! | RecessBox!; "Click the
left or right arrow")
DIALOGADDSCROLLBAR(1000; "Scroll"; 10; 30; 100; 0; Left! | HScroll!; BarPos;
1; 3)
DIALOGSHOW(1000; "Scroll"; Msg)
Stop := 1
WHILE(Stop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
SWITCH(Msg[5])
CASEOF WM_SYSCOMMAND: Stop := 0
CASEOF WM_HSCROLL: CALL(Scroll)
ENDSWITCH
RETURN
LABEL(Scroll)
SWITCH(Msg[6])
CASEOF SB_LINEUP:
MESSAGEBOX(x; "CALLBACK FUNCTION"; "You clicked
the left arrow"; IconInformation!)
CASEOF SB_LINEDOWN:
MESSAGEBOX(x; "CALLBACK FUNCTION"; "You clicked
the right arrow"; IconInformation!)
ENDSWITCH
RETURN
8051
APPLICATION(A1; "WordPerfect"; Default; "US")
// Returns the handle of five push button controls
// Demonstrate DIALOGHANDLE command
VARERRCHK(Off!)
DIALOGDEFINE(1000; 50; 50; 100; 190; Percent!; "DIALOGHANDLE")
FORNEXT(x; 1; 5; 1)
DIALOGADDPUSHBUTTON(1000; x; 10; x + (x * 20) - 10; 75; 15; NonDefaultBttn!;
"Button " + x)
ENDFOR
DIALOGADDTEXT(1000; -1; 10; 120; 75; 40; RecessBox! | Left!; "Press Enter,
or choose Close from the system menu box.")
DIALOGSHOW(1000; 1)
vResult := ""
FOREACH(vControl; {"1"; "2"; "3"; "4"; "5"})
vResult := vResult + "Button " + vControl + ": "
DIALOGHANDLE(vHandles; 1000; vControl)
vResult := vResult + vHandles + ". "
ENDFOR
MESSAGEBOX(x; "CONTROL HANDLES"; vResult)
DIALOGDESTROY(1000)
8057
// Create a DOS or Windows* dialog box
// Demonstrate IFPLATFORM command
// compile on DOS platform
IFPLATFORM(DOS)
DLGCREATE(x; "TITLE"; DLGNoCancel!;;;30;14)
DLGCONTROL(CtrlRadioButton!;a;"Letter";StyInitial!;4;4;;2)
DLGCONTROL(CtrlRadioButton!;b;"Itinerary";;4;6;;2)
DLGCONTROL(CtrlRadioButton!;c;"Memo";;4;8;;2)
DLGCONTROL(CtrlRadioButton!;d;"Fax";;4;10;;2)
DLGEND
SWITCH(1)
CASEOF a: BEEP
CASEOF b: BEEP
CASEOF c: BEEP
CASEOF d: BEEP
ENDSWITCH
ENDIFPLATFORM
// compile on Windows* platform
IFPLATFORM(WIN95)
APPLICATION(A1; "WordPerfect"; Default; "US")
DIALOGDEFINE(1000; 50; 50; 100; 125; Style:OK!; Caption:"TITLE")
DIALOGADDRADIOBUTTON(1000; 1; 10; 10; 75; 15; ButtonText:"Letter"; a)
DIALOGADDRADIOBUTTON(1000; 2; 10; 25; 75; 15; ButtonText:"Itinerary"; b)
DIALOGADDRADIOBUTTON(1000; 3; 10; 40; 75; 15; ButtonText:"Memo"; c)
DIALOGADDRADIOBUTTON(1000; 4; 10; 55; 75; 15; ButtonText:"Fax"; d)
DIALOGSHOW(1000; 1)
SWITCH(1)
CASEOF a: vMsg := "Letter"
CASEOF b: vMsg := "Itinerary"
CASEOF c: vMsg := "Memo"
CASEOF d: vMsg := "Fax"
ENDSWITCH
MESSAGEBOX(x; "Selection"; vMsg; IconInformation!)
DIALOGDESTROY(1000)
ENDIFPLATFORM
8058
APPLICATION(A1; "WordPerfect"; Default; "US")
// Compiling this macro produces a compile-time syntax error
// To compile, make the second AboutDlg a comment (//)
// Demonstrate ENDAPP command
AboutDlg
ENDAPP(A1)
AboutDlg
8059
This command is included for DOS compatibility. The windows equivalent
is Menu.
8060
This command is included for DOS compatibility. The windows equivalent
is Run.
8061
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate DIALOGDISPLAY command
HRt = NTOC(0F90Ah)
HSp = " "
vCombo = "Combo item 1"
vList = "List item 1"
WM_COMMAND = 273
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 160; 125; Percent! | NoFrame! | Cancel!; "WM_COMMAND")
DIALOGADDLISTBOX(1000; 100; 10; 10; 60; 30; Sorted!; vList)
DIALOGADDLISTITEM(1000; 100; "List item 1")
DIALOGADDLISTITEM(1000; 100; "List item 2")
DIALOGADDLISTITEM(1000; 100; "List item 3")
DIALOGADDCOMBOBOX(1000; 101; 10; 50; 60; 40; Droplist!; vCombo; 100)
DIALOGADDLISTITEM(1000; 101; "Combo item 1")
DIALOGADDLISTITEM(1000; 101; "Combo item 2")
DIALOGADDLISTITEM(1000; 101; "Combo item 3")
DIALOGADDPOPUPBUTTON(1000; 102; 10; 80; 60; 15; vPopup)
DIALOGADDLISTITEM(1000; 102; "Popup item 1")
DIALOGADDLISTITEM(1000; 102; "Popup item 2")
DIALOGADDLISTITEM(1000; 102; "Popup item 3")
DIALOGADDPUSHBUTTON(1000; 103; 100; 10; 50; 15; NonDefaultBttn!; "Push
Button")
DIALOGADDRADIOBUTTON(1000; 104; 100; 35; 50; 15; "Radio"; vRadio)
DIALOGADDCHECKBOX(1000; 105; 100; 60; 50; 15; "Check box"; vCheck)
DIALOGHANDLE(hButton; 1000; 103)
DIALOGHANDLE(hRadio; 1000; 104)
DIALOGHANDLE(hCheck; 1000; 105)
DIALOGDISPLAY(1000; 1; Msg)
x := 0
While(x = 0)
Endwhile
DIALOGDESTROY(1000)
LABEL(MSG)
IF((Msg[5] = WM_SYSCOMMAND) OR (Msg[3] = "CancelBttn"))
BEEP
x = 1
RETURN
ENDIF
IF(Msg[5] = WM_COMMAND)
lParam = Msg[7]
DIALOGUNDISPLAY(1000; 1)
MsgBox
DIALOGDISPLAY(1000; 1; Msg)
ENDIF
RETURN
LABEL(MsgBox)
SWITCH(LOWRD(lParam))
CASEOF hButton: vHandle = hButton
CASEOF hRadio: vHandle = hRadio
CASEOF hCheck: vHandle = hCheck
DEFAULT: vHandle = "N/A"
ENDSWITCH
Lo = "Low-word: " + LOWRD(lParam) + HRt + HRt
Hi = "High-word: " + HIWRD(lParam) + HRt + HRt
Handle = "Control handle: " + vHandle + HRt + HRt
ListItems = "Selected list items:" + HRt + HRt + HSp + vPopup + HRt + HSp
+ vList + HRt + HSp + vCombo + HRt
MESSAGEBOX(vResult; "WM_COMMAND"; Hi + Lo + Handle + ListItems)
RETURN
FUNCTION LOWRD(lo)
lo = lo & 65535
Return(lo)
ENDFUNC
FUNCTION HIWRD(hi)
hi = hi > 16
RETURN(hi)
ENDFUNC
8064
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate DIMENSIONS command
HRt = NTOC(0F90Ah)
DECLARE array[4; 2; 5]
v1 = DIMENSIONS(array[])
v2 = DIMENSIONS(array[]; 0)
v3 = DIMENSIONS(array[]; 1)
v4 = DIMENSIONS(array[]; 2)
v5 = DIMENSIONS(array[]; 3)
v6 = DIMENSIONS(array[]; 4)
v7 = DIMENSIONS(c)
v8 = DIMENSIONS(b[])
vMsg = v1 + HRt + v2 + HRt + v3 + HRt + v4 + HRt + v5 + HRt + v6 + HRt
+ v7 + HRt + v8
MESSAGEBOX(x; "DIMENSIONS"; "Variables v1 - v8 values:" + Hrt + Hrt + vMsg)
8065
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONADDLISTITEM command
Loop = 1
ListItem = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 107; 125; Percent! | NoFrame!; "RegionAddListItem")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 75; 15; Left!; "Click to add list item")
DIALOGADDLISTBOX(1000; 102; 10; 35; 85; 75; Sorted!; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
Loop = 0
ENDIF
IF(Msg[3] = 101)
AddListBoxItem
ENDIF
RETURN
LABEL(AddListBoxItem)
vItem = "Item " + ListItem
REGIONADDLISTITEM("1000.102"; vItem)
ListItem = ListItem + 1
RETURN
8066
APPLICATION(WP; "WordPerfect"; Default; "US")
// Command: REGIONENABLEWINDOW
Loop = 1
WM_SYSCOMMAND = 274
vDisable = 1
DIALOGDEFINE(1000; 50; 50; 155; 75; Percent! | NoFrame!; "RegionEnableWindow")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 125; 15; Left!; "Click to disable/enable
check box")
DIALOGADDCHECKBOX(1000; 102; 55; 30; 50; 15; "Check box"; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
Loop = 0
ENDIF
IF(Msg[3] = 101)
IF(vDisable = 1)
REGIONENABLEWINDOW("1000.102"; Disable!)
vDisable = 0
ELSE
REGIONENABLEWINDOW("1000.102"; Enable!)
vDisable = 1
ENDIF
ENDIF
RETURN
8067
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONGETCHECK command
Loop = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 20; 30; 135; 75; NoFrame!; "RegionGetCheck")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 125; 15; Left!; "Click to get check box
state")
DIALOGADDCHECKBOX(1000; 102; 30; 35; 20; 15; "1"; var)
DIALOGADDCHECKBOX(1000; 103; 60; 35; 20; 15; "2"; var)
DIALOGADDCHECKBOX(1000; 104; 90; 35; 20; 15; "3"; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
Loop = 0
ENDIF
IF(Msg[3] = 101)
REGIONGETCHECK(vChk1; "1000.102")
REGIONGETCHECK(vChk2; "1000.103")
REGIONGETCHECK(vChk3; "1000.104")
FORNEXT(x; 1; 3; 1)
IF(INDIRECT("vChk" + x) = 1)
ASSIGN(INDIRECT("vChk" + x); "selected")
ELSE
ASSIGN(INDIRECT("vChk" + x); "not selected")
ENDIF
ENDFOR
MESSAGEBOX(vYesNo; "Check Box State"; "1: " + vChk1 + NTOC(0F90Ah) + "2:
" + vChk2 + NTOC(0F90Ah) + "3: " + vChk3)
ENDIF
RETURN
8068
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONGETSELECTEDTEXT command
Loop = 1
lParam = 7
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 20; 30; 107; 125; NoFrame!; "RegionGetSelectedText")
DIALOGADDTEXT(1000; 0; 0; 15; 107; 15; Center!; "Select a fruit")
DIALOGADDLISTBOX(1000; 102; 10; 35; 85; 75; Sorted!; var)
FOREACH(vList; {"Apples"; "Bananas"; "Oranges"; "Grapes"; "Pears"; "Corn"})
DIALOGADDLISTITEM(1000; 102; vList)
ENDFOR
DIALOGHANDLE(hItem; 1000; 102)
DIALOGSHOW(1000; 102; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
Loop = 0
ENDIF
IF(LWORD(Msg[lParam]) = hItem)
REGIONGETSELECTEDTEXT(vSelectItem; "1000.102")
IF(vSelectItem = "Corn")
BEEP
MESSAGEBOX(z; "Error"; "You didn't select
a fruit!"; IconExclamation!)
ELSE
MESSAGEBOX(z; "List Box Item"; "You selected
" + vSelectItem)
ENDIF
ENDIF
RETURN
FUNCTION LWORD(vNum)
vNum = vNum & 65535
RETURN(vNum)
ENDFUNC
8069
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONAGETWINDOWTEXT command
Loop = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 158; 50; Percent! | NoFrame!; "RegionGetWindowText")
DIALOGADDFRAME(1000; 100; 10; 10; 10; 10; Frame! | Filled! | Gray!)
DIALOGADDHOTSPOT(1000; 101; 10; 10; 10; 10; Click!)
DIALOGADDTEXT(1000; 0; 28; 10; 125; 15; Left!; "Click to retrieve the caption
bar title")
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
Loop = 0
ENDIF
IF(Msg[3] = 101)
GetTitle
ENDIF
RETURN
LABEL(GetTitle)
REGIONGETWINDOWTEXT(vTitle; "1000")
MESSAGEBOX(x; "Region Commands"; "The caption bar title is " + vTitle;
IconInformation!)
Loop = 0
RETURN
8070
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONMOVEWINDOW command
Loop = 1
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 20; 40; 135; 75; NoFrame!; "RegionMoveWindow")
DIALOGADDCHECKBOX(1000; 101; 10; 10; 75; 15; "Click to start demo"; var)
DIALOGSHOW(1000; 101; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
Loop = 0
ENDIF
IF(Msg[3] = 101)
REGIONSHOWWINDOW("1000.101"; Hide!)
FORNEXT(x; 50; 190; 10)
REGIONMOVEWINDOW("1000"; 20; x; 135; 75)
WAIT(.5)
ENDFOR
FORNEXT(x; 50; 190; 10)
REGIONMOVEWINDOW("1000"; x; 190; 135; 75)
WAIT(.5)
ENDFOR
FORNEXT(x; 190; 40; -10)
REGIONMOVEWINDOW("1000"; 200; x; 135; 75)
WAIT(.5)
ENDFOR
FORNEXT(x; 190; 40; -10)
REGIONMOVEWINDOW("1000"; x; 40; 135; 75)
WAIT(.5)
ENDFOR
WAIT(.5)
REGIONMOVEWINDOW("1000"; 20; 40; 300; 225)
DIALOGADDTEXT(1000; 102; 0; 15; 300; 15; Center!; "Finished")
FORNEXT(x; 20; 100; 5)
REGIONMOVEWINDOW("1000.102"; 0; x; 300; 15)
WAIT(.9)
ENDFOR
ENDIF
RETURN
8071
APPLICATION(WP; "WordPerfect"; Default; "US")
// Demonstrate REGIONREMOVELISTITEM command
Loop = 1
lParam = 7
WM_SYSCOMMAND = 274
DIALOGDEFINE(1000; 50; 50; 107; 125; Percent! | NoFrame!; "RegionRemoveListItem")
DIALOGADDTEXT(1000; 0; 0; 15; 107; 15; Center!; "Select a fruit to delete")
DIALOGADDLISTBOX(1000; 102; 10; 35; 85; 75; Sorted!; var)
FOREACH(vList; {"Apples"; "Bananas"; "Oranges"; "Grapes"; "Pears"; "Watermelon";
"Grapefruit"; "Peaches"})
DIALOGADDLISTITEM(1000; 102; vList)
ENDFOR
DIALOGHANDLE(hItem; 1000; 102)
DIALOGSHOW(1000; 102; Msg)
WHILE(Loop = 1)
ENDWHILE
DIALOGDESTROY(1000)
QUIT
LABEL(Msg)
IF(Msg[5] = WM_SYSCOMMAND)
Loop = 0
ENDIF
IF(LWORD(Msg[lParam]) = hItem)
REGIONGETSELECTEDTEXT(vSelectItem; "1000.102")
REGIONREMOVELISTITEM("1000.102"; vSelectItem)
ENDIF
RETURN
FUNCTION LWORD(vNum)
vNum = vNum & 65535
RETURN(vNum)
ENDFUNC