SMALLS() Short: ------ SMALLS() Lookup tables on dbf with optional hotkeys, code block Returns: -------- lReturn => True if CR pressed, False otherwise Syntax: ------- Smalls(expDisplayString,[cTitle],[expAlias],[expReturn],; [expStartRange,expEndRange],[bException],[lForceCaps]) Description: ------------ Popup windowed lookup tables. Many options. The up/down/home/end/pgup/pgdn keys are active. If there is an controlling index key and the user types alphanumeric characters, it is assumed a keysearch is wanted. A read pops up allowing the user to complete the search key, and a seek is then done. Pressing ENTER or ESCAPE exits the lookup and closes the window. Depending on values contained in the optional parameters, values may be KEYBOARDED or ASSIGNED at that time. Other keys may be assigned actions, depending on the last parameter, described below. <expDisplayString> is what appears for each row in the lookup table. Think of it as a column definition for Tbrowse. It can be either: 1. A Characters string like "LAST+MI+LEFT(FIRST,1)" In which case it is macro expanded and made into a code block to display this expression 2. A Codeblock like {||LAST+MI+LEFT(FIRST,1)} The resulting codeblock is then used as a Tbrowse column definition. [cTitle] is an optional lookup box title string [expAlias] Determines the area/dbf/ntx to use, can be (expC) alias name or (expN) numeric work area or (expC) dbf/ndx in the format "%dbfname%ndxname" If left as nil, the current DBF/NTX are used and left open when done at the last record pointer position. [expReturn] This determines what happens when CR is pressed. It need not be anything, but it can be: (expC) a character expression which is macro expanded and KEYBOARDed. Any valid character expression will do. (Bear in mind that it must be character. If you want to keyboard a value into a DATE field, for instance, your keyboard expression could be "DTOC(entrydate)" (expB) a code block which is simply evaluated. this can do anything you wish. It could assign multiple values from the lookup file into active gets, for instance. [expStartRange-expEndRange] These are valid for indexed files, and determine the beginning and ending key ranges. The values must match the type of the controlling index. [bException] If this codeblock is passed, any keys except up/down/enter/pgup/pgdn/home/end/escape (and alphanumeric keys if indexed ) will cause the block to be evaluated like so: eval(block,lastkey()) Some interesting ideas for this would be to assign a key to an update routine for updating the lookup dbf while doing a lookup. (yikes - you didn't hear that from me!) [lForceCaps] Means force capital letters when user is typing in a lookup key. Allows case-insensitive search when index is on upper(field) Examples: --------- // lookup on "LNAME+' '+FNAME" in current area smalls("LNAME+' '+FNAME") // lookup on "LNAME+' '+FNAME" in current area // use "Name" as box title smalls("LNAME+' '+FNAME","Name") // lookup on "LNAME+' '+FNAME" in current area // use "Name" as box title // go to area 5 for the lookup // send LNAME to the keyboard if CR pressed smalls({||LNAME+''+FNAME},"Name",5,"LNAME") // lookup on "LNAME+' '+FNAME" in current area // use "Name" as box title // go to alias CUSTOMER for the lookup smalls("LNAME+''+FNAME","Name","CUSTOMER") // open customer.dbf and do a lookup on it // lookup on "LNAME+' '+FNAME" // use "Name" as box title smalls("LNAME+''+FNAME","Name","%CUSTOMER") // open customer.dbf and do a lookup on it // lookup on "LNAME+' '+FNAME" // use "Name" as box title // limit lookup to between "SMITH" and "ZEBRA" smalls("LNAME+''+FNAME","Name","%CUSTOMER%NAME", ; "SMITH","ZEBRA") // open CUSTOMER.DBF with ENTRYDATE.NDX and do a lookup // lookup on "LNAME+' '+FNAME" // use "Name" as box title // limit lookup to the last year smalls("LNAME+''+FNAME","Name", ; "%CUSTOMER%ENTRYDATE",date()365, date()) Notes: ------- see SMALLVALID(), SMALLWHEN() and SMALLKSET() for various get system interfaces to SMALLS(). Source: ------- S_SMAL.PRG