|Column Tag:||Kelly's Corner
Dialoger Helps HyperCard
By Dave Kelly, MacTutor Editorial Board
A dialog with HyperCard
Are you getting tired of only being able to create dialogs with only 3 possible replies. HyperTalk supplies the Answer statement which displays a dialog box containing a prompt and one, two, or three buttons. The Ask statement displays a dialog box containing a question and an edit box for the user to type a response. For very simple responses these statements may be good enough, but what do you do if you want a more complex dialog?
You could write your own XCMD or XFCN to display a custom dialog that you could create with ResEdit, but why re-invent the wheel? Introducing Dialoger from theResult Software Inc. At the heart of Dialoger is a set of XCMDs and XFCNs which provide versatility and flexibility. Dialoger is a productivity tool. The Dialoger package consists of four stacks, 3 of which provide help and examples.
The Dialog Maker stack is the tool provided to create dialogs which can then be exported to any stack along with a button with a script to call the dialog. This stack provides a tool palette which lets you create the custom dialog on a HyperCard card. The tools let you create the items used by the dialog. The limitation here is that even though you can create as many items as you have room for, you may only manipulate (or modify) items 3-16 from your HyperCard script. A bit of planning and this wont be too much of an inconvenience.
The Push Button Tool lets you create a new push button. The limitation here is that the first item of any dialog should always be an OK push button and the second item should be a Cancel push button. If you dont want an OK or Cancel, you can define the size to zero and make the item virtually invisible. Since you can only manipulate items 3-16, it is recommended that the first two items be defined as OK and Cancel.
The Radio Button and Checkbox Tools allow you to create radio and Checkbox controls for the dialog. Radio buttons may be grouped together such that only one button may be selected at a time by ordering the buttons next to each other in the item list. You can re-order the item list by clicking the create button.
The editable text and static text tools are for providing text in the dialog. User text placeholders (such as ^0, ^1, ^2, and ^3) may be used to replace text when the dialog is called (in your script) or text items may be editable or static. The usertext tool is an alternative to the static text. It is not restricted to begin in the default font; any font and size may be specified.
The icon and picture tools allow you to use icons or pictures in your dialog. When you click on these tools, a list of ICONs or PICTs from the current stack are shown. An open button allows you to open another stack to use ICON or PICTs from there. ICONs or PICTs from other applications or files need to be moved to a stack using ResEdit or ResCopy (which comes with Dialoger).
The box tool is used to create boxes which you can have direct control over how the box will be displayed (such as pen pattern, fill pattern, etc.) from your script. However, you will not have control until the dialog is created and the box item must still be between item 3 and 16 to be able to set the patterns, etc.
The Popup Tool creates a new Popup menu item for your dialog box. The menu items are included in the button script when you export the dialog to your stack.
The List tool is used to create list items.
Buttons are also available to create ICON, PICT and SICN (small icons) from any part of the HyperCard window.
Import button will import existing dialogs into HyperCard for editing. Create will create DLOG and DITL resources from the HyperCard card. Before creating the dialog you may re-order the items to the order you want them to appear. You may also specify the type of dialog that you want to create. The Show button will give you a quick preview of what the dialog will look like. This gives you a chance to see what needs to be modified in the dialog before actually exporting to your stack. The Export button allows you to install your dialog and pre-defined button script into your stack. You may also export the Dialoger XCMDs and associated XFCNs into your stack.
The Dialog Maker stack creates the dialog and a script which you can build upon to link your stack and dialog(s) together. The Dialoger XCMD is call with a HyperTalk Put or Get statement:
put Dialoger(Example& return & on exampleHit¬
, ¬ --Placeholder replacement text
, ¬ --Radio Button Deep Dish
, ¬ --Radio Button Thinn Crispy
, ¬ --Checkbox Home Delivery
, ¬ --Icon 20086
, ¬ --Button Motto
, userBox Black,None,Copy& CR & Style ¬ --Box (Black pen, None
, userText New York,18,White& CR &Peters Pizza Palace<B<U¬ --Text
Peters Pizza Palace
, userList Geneva,12 & CR & List1¬ --List Anchovies
, ¬ --Editable Text
, ¬ --Static Text Name:
, userPop & CR & PopUp1¬ --PopUp Small
, ¬ --Static Text Size:
, ¬ --Static Text Toppings
, userBox Gray,None,Copy¬ --Box (Gray pen, None fill)
) into dResult
-- Beyond Limit: , ¬ --Card Picture
Each parameter of the function corresponds to each item in the dialog. Parameters 3-16 may be modified when the dialog is called, any others are beyond the limits of the function. The status of each item in the dialog is returned by the function and (in this case) placed into the variable dResult. Each line of dResult corresponds to the status of each item in the dialog at the time it was closed. dResult might look like this:
The OK above indicated that item one of the dialog was selected. Item 2 was not selected. Item 3 was true, 4 was false, 5 was true. The list item (item 10) had items 3,4,5,6, and 7 selected. Item 11 was the editable text field; Dave was returned. The Popup menu item Small was selected in item 13.
Since the scripts are pre-defined by the Dialog Maker stack, implementing the dialogs is a breeze. The dialogs may be customized even more and controlled by a script handler even when the dialog is still active. The on exampleHit statement in the dialoger function will generate a HyperCard message exampleHit which may be handled as desired even when the dialog is still active.
Additional commands are available to give even more flexibility to the dialogs. For example, you can use the ResIDList or ResNameList to get all the names or IDs of a specified resource type. This would be useful to get the names of all fonts to put in a menu or a list. The weakest aspect of Dialoger is the manual. theResult Software has recognized that this is a weak point and will eventually update the manual. An experienced program will still have no trouble figuring out how things work, but still may have to dig a little to find out what each function/command does. There is a help stack which gives an overall tutorial of Dialoger and a Commands stack which gives syntax and a description of some of the XFCNs which may be used in conjunction with the dChanger, and dialoger XFCNs. Not all functions are listed anywhere in the Dialoger package, though may be useful to you. The following XCMDs and XFCNs are found in the Dialoger package:
CloseResFork: (example: closeResFork(fNum)
CoSortInt: (Dont know what this does)
dChanger: this function is used to change items in a dialog.
DisplayPict: assumed that this displays PICTs
GetPicture: assumed that his gets PICTs
ResCopyQuick: (example: resCopyQuick fromFile,toFile,PICT,(short name of obj) )
SetCursor2: sets cursors
AfterChar: (example: put AfterChar(quote, strName) into var ) this will put all characters after the specified character into the variable.
BeforeChar: (example: put BeforeChar(quote, strName) into var )this will put all characters before the specified character into the variable.
ChangeStr: (Dont know what this does)
dActivate: (example: get dActivate() ) used to activate modeless dialogs
dBreaker: (Dont know what this does).
dBubble: (example: get dialoger(dBubble() & return & dismiss) according to the manual, this is used in the closeStack script for modeless dialogs to help determine which dialogs are still open so they can be dismissed.
dContents: (example: put dContents(dialog) into dIntermResult) gets the contents of the dialog at any one moment.
Dialoger: (see example above) displays dialogs and returns the contents of the dialog when dialog is dismissed.
dMaker: (example: get dMaker(dInfo, iTypes, iRects, iTexts, getsHits)
Dragger: Dont know what this does.
FileName: (example: get fileName(STAK, Select stack to install dialog in:) ) uses standard get file dialog to get a file name.
FontHeight : (Example: put fontHeight(( textfont of obj), (textSize of obj)) into fH ) gets font height
FontName: gets font name
iMaker: create icons out of any part of the card (example: iMaker(,it) ) uses it as the icons name.
NewFileName: (example: get newfilename (Report Name:) get a new file name using standard get file dialog and use the parameter as the default.
OpenResFork: put openResFork(fName) into fNum
PictRect :(example: get pictRect(rID)
put item 4 of it - item 2 of it into dH
put item 3 of it - item 1 of it into dV ) get the coordinates of a PICT rectangle
pMaker: creates a PICT out of any part of the card (example: pMaker(,it) ) uses it as the PICTs name.
ResIDList: (example: get resIDList(fName,rType) gets IDs from file name fName which have resource type rType.
ResNameList: similar to ResIDList, but gets resource names instead of IDs.
ResSortedList: sorts resource list.
rInfo: Dont know how this works
sMaker: creates small icons out of any part of the card (example: sMaker(,it) ) uses it as the small icons name.
StringWidth: (example: put stringWidth(short name of obj,chicago,12) into oldPixLen ) gets a portion of a string.
StripItem: Dont know how this works
TestBed: Dont know how this works
UnScrunch: Dont know how this works
Dialoger is in fact an ingenious productivity tool which should help you in all your stack development efforts. I recommend it for anyone who uses HyperTalk. Hopefully this overview has given you a good feel for what Dialoger can do for you. Questions regarding Dialoger may be referred to the address below:
Dialoger for HyperCard® is available from:
theResult Software, Inc.
616-D Guilford College Road
Greensboro, NC 27409
Fax (919) 855-6931
Price: $94.29 single license version
or add $55 to upgrade to unlimited runtime version:
$150.00 unlimited runtime, (developer version)
includes HyperCard version 1.2.2 and is
NOT COPY PROTECTED!!