| Search Locate Previous Next | Contents |
It is very easy to get carried away with the Gui stuff and forget that the user-interface is only there as a way for users to run your code! It is good practice to ensure that the entire application can be run from the APL session with no Gui components visible. If you find that you have to get the system into a given state with certain forms visible and various controls clicked before you can test anything ... watch out!
Of course there is no harm in adding dummy functions to check that the controls run without VALUE ERRORs, but build and test them from the session! Here are my very minimal functions to add and delete rows from the database add your own bells and whistles to taste ...
posADDNAME
[1] © Catenate a new row to our data
[2] names,'(noname)'
[3] addrs,'House' 'Street' 'Town' 'PostCode'
[4] eyes,1
[5] log,0 2½0 ''
[6] pos½eyes
newDELNAME pos
[1] © Remove marked row(s)
[2] :If 1<½eyes
[3] msk~(¼½eyes)¹pos
[4] namesmsk/names
[5] addrsmsk/addrs
[6] eyesmsk/eyes
[7] logmsk/log
[8] :End
[9] newpos½eyes
© Better test it ...
names
Joe Bloggs
ADDNAME
2
names
Joe Bloggs (noname)
DELNAME 2
1
names
Joe Bloggs
Now for a minimalist file system. We will need to save data to a given file name, and load it back again. Both of these operations should take a snapshot so that the user will be allowed to exit with no warnings if he/she has just loaded a new file, or has not made any changes since the last save.
Here is the code ...
SAVEFILE fi
[1] © Save our datafile
[2] fifi,(~'.'¹fi)/'.con'
[3] © Write data to file!
[4] fi Put names addrs eyes log
[5] © Record latest state of data
[6] wasnames addrs eyes log
OPENFILE fi
[1] © Read our datafile and note state
[2] fifi,(~'.'¹fi)/'.con'
[3] © Read data from file!
[4] names addrs eyes logGet fi
[5] wasnames addrs eyes log
fi Put var;TRAP
[1] © Minimalist file system
[2] TRAP22 'E' '
New'
[3] fi FTIE 1 ª
Write
[4] New:fi FCREATE 1
[5] Write:FDROP 1,1-11FSIZE 1
[6] var FAPPEND 1
[7] FUNTIE 1
varGet fi
[1] © Minimalist file system
[2] fi FSTIE 1
[3] varFREAD 1 1
[4] FUNTIE 1
file'demo'
SAVEFILE file
NEWFILE
To get the saved data back, we can use the standard Windows file browser to retrieve the name, set this into file, and read the data ...
fileWin.Fbx '*.con' 'Contacts files'
file
C:\DATA\DWS\Demo.con
OPENFILE file
names
Joe Bloggs
Ignoring, for the moment, the Incidents > button, you now have a completely functional application! Attach the ADDNAME and DELNAME functions to the Select events of the Add and Delete buttons and you should have a main form which looks like:
... notice the space along the top edge for a toolbar. The menu will make space for itself, but toolbars just sit over the top area of the form.
If you have set all the actions correctly, you should be able to add a new entry, tab to the Name field and change it. As you leave the field, the name in the left-hand list box should alter to match! As you move up and down the list box, all three of the boxed fields change to match. Just in case yours doesnt work yet here is the complete code from this dialogue box displayed with Disp ...
Disp Ty Caption Posn Size Properties®dbx.mfÚÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ
ÛTyÛCaption ÛPosn ÛSize ÛProperties Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛFMÛMy Contacts Û176 36 Û288 568 ÛÚÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛBehaviourÛÚÎÎÂÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÂÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛCRÛÛ¸ Do SetIcon cau... Û{}ÛÛ Û
Û Û Û Û ÛÛ ÛÃÎÎÏÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÝÛ Û
Û Û Û Û ÛÛ ÛÛCRÛÛinx1 Û{}ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÁÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÁÎÎÙÛ Û
Û Û Û Û ÛÃÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ Û
Û Û Û Û ÛÛLocals Û{inx} Û Û
Û Û Û Û ÛÀÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛLSÛ Û40 16 Û¯108 152 ÛÚÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛIndicesÛÚÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛExpressionÛinx ÛÛ Û
Û Û Û Û ÛÛ ÛÃÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝÛ Û
Û Û Û Û ÛÛ ÛÛDependenceÛ{inxÛnamesÛfile}ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙÛ Û
Û Û Û Û ÛÃÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ Û
Û Û Û Û ÛÛItems ÛÚÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û Û
Û Û Û Û ÛÛ ÛÛExpressionÛnames Û Û Û
Û Û Û Û ÛÛ ÛÃÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ Û Û
Û Û Û Û ÛÛ ÛÛDependenceÛ{namesÛfile}Û Û Û
Û Û Û Û ÛÛ ÛÀÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û Û
Û Û Û Û ÛÀÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛTXÛName ... Û64 208 Û20 ¯232 ÛÚÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛTextÛÚÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛExpressionÛinxnames ÛÛ Û
Û Û Û Û ÛÛ ÛÃÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÝÛ Û
Û Û Û Û ÛÛ ÛÛDependenceÛ{inxÛnames}ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÙÛ Û
Û Û Û Û ÛÀÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛNPÛAddress ... Û108 208Û¯156 ¯356ÛÚÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛTextÛÚÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛExpressionÛinxaddrs ÛÛ Û
Û Û Û Û ÛÛ ÛÃÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÝÛ Û
Û Û Û Û ÛÛ ÛÛDependenceÛ{inxÛaddrs}ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÙÛ Û
Û Û Û Û ÛÀÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛRBÛEyes Û104 ¯24Û100 112 ÛÚÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛStyle Û{Smalltext} Û Û
Û Û Û Û ÛÃÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ Û
Û Û Û Û ÛÛIndex ÛÚÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛExpressionÛinxeyes ÛÛ Û
Û Û Û Û ÛÛ ÛÃÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÝÛ Û
Û Û Û Û ÛÛ ÛÛDependenceÛ{inxÛeyes}ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÙÛ Û
Û Û Û Û ÛÃÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ Û
Û Û Û Û ÛÛLabelsÛÚÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÌ Û Û
Û Û Û Û ÛÛ ÛÛExpressionÛeyecolourÛ Û Û
Û Û Û Û ÛÛ ÛÀÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÙ Û Û
Û Û Û Û ÛÀÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛACÛ&Add Û¯32 16 Û28 72 ÛÚÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛBehaviourÛÚÎÎÂÂÎÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛSLÛÛinxADDNAMEÛ{namesÛinx}ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÁÁÎÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÙÛ Û
Û Û Û Û ÛÀÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛACÛ&Delete Û¯32 92 Û28 72 ÛÚÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌÛ
Û Û Û Û ÛÛBehaviourÛÚÎÎÂÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÌÛÛ
Û Û Û Û ÛÛ ÛÛSLÛÛinxDELNAME inxÛ{namesÛinx}ÛÛÛ
Û Û Û Û ÛÛ ÛÀÎÎÁÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÙÛÛ
Û Û Û Û ÛÀÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙÛ
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛGVÛ Û40 196 Û¯76 ¯204 ÛÚÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛDepthÛÚÎÎÎÎÎÎÎÎÎÎÂÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛExpressionÛ-1ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÎÎÎÎÎÎÎÎÁÎÎÙÛ Û
Û Û Û Û ÛÀÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛSTÛ Û264 0 Û24 568 ÛÚÎÎÎÎÎÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛStyle Û{Smalltext} Û Û
Û Û Û Û ÛÃÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÝ Û
Û Û Û Û ÛÛBehaviourÛÚÎÎÂÂÎÎÎÎÂÎÎÌÛ Û
Û Û Û Û ÛÛ ÛÛCRÛÛsb¸Û{}ÛÛ Û
Û Û Û Û ÛÛ ÛÀÎÎÁÁÎÎÎÎÁÎÎÙÛ Û
Û Û Û Û ÛÀÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÃÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÏÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÝ
ÛACÛ&Incidents >Û¯48 ¯24Û24 112 ÛÚÎÎÎÎÂÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÌ Û
Û Û Û Û ÛÛHintÛUpdate incident logÛ Û
Û Û Û Û ÛÀÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ Û
ÀÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÁÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÙ
The event table is still quite simple, but note the button actions which also set the index to the new entry, so need to holler it to ensure the list box moves the highlight and the name/address/eyes fields get redrawn. The Incident button has a suitable hint, but does not do anything yet.
As a system for your personal use, this is probably OK as it is, but if you want to ship it as a runtime application, then the next stage is obviously to hook up the file functions to a menu bar, and probably to duplicate them on a standard Office-style toolbar.