Page 1 of 1

FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Sat Sep 06, 2014 7:01 am
by nageswaragunupudi
When we need to get user input for a single variable, MsgGet() function is very handy. But when we need to obtain user input for 2 or more variables MsgGet() does not help and we may need to quickly code a small dialog box.

Now MsgGet is extended to handle arrays. Syntax:
MsgGet( cTitle, [ cMessage (or) aPrompts ], aData ) --> lModified

Simple example:

Code: Select all

local cName := "Mark"
local cCity := "New York"
local aData

aData := { cName, cCity }
if MsgGet( "Enter Values", { "Name", "City" }, aData )
   cName := aData[ 1 ]
   cCity := aData[ 2 ]
   ? cName, cCity
endif
 
Note: MsgGet() automatically pads some extra space for data entry and trims the values while returning.

Still this does not impress much. Even this involves writing many lines of code. If there are more variables more the code. We may still feel comfortable with coding a small dialog box of our own.

Now FWH makes the process even much simpler with the translate EDITVARS.
This is the translate:
#xtranslate EDITVARS <v1> [,<vN>] ;
[ TITLE <ttl> ] ;
[ PROMPTS <prmt,...> ] ;
[ PICTURES <pic,...> ] ;
[ VALIDS <bvld,...> ] ;
=> ;
MsgGet( <ttl>, {<prmt>}, ;
ArrTranspose( \{ \{ <"v1"> [,<"vN">] \}, ;
\{ bSETGET( <v1> ) [, bSETGET( <vN> ) ] \} , nil, ;
{<pic>}, {<bvld>} \} ) )

Now let us see how simole it is to get user input for multiple variables. Any number of variables.

First a very simple case:

Code: Select all

   local cName, cCity, lMarried := .f.,  nSalary := 0.00

   EDITVARS cName, cCity, lMarried, nSalary
   ? cName, cCity, lMarried, nSalary
 
Image

Now let us use User friendly prompts and this time let us get User name and Password:

Code: Select all

   local cUser, cPW

   EDITVARS cUser, cPW PROMPTS "User Name", "Password"
   ? cUser, cPW
 
Image

Please note how password edit is handled automatically.

The capability is not limited to two or three vairables. We can use for unlimited number of variables. The dialog box SCROLLS.
It is also possible for us to specify picture clauses, combo boxes, dbcombos, checkboxes (auto), memo edits, valids etc with a single command.

Here is a more complex example:

Code: Select all

   local cName, cCity, cNotes
   local cState   := "NY"
   local lMarried := .f., nAge := 20, nSalary := 20000.00
   local aStates

   use c:\fwh\samples\states
   aStates  := FW_DbfToArray()
   close states

   EDITVARS cName, cCity, cState, lMarried, nAge, nSalary, cNotes ;
    PROMPTS "Name", "City", "State", "Married", "Age", "Salary", "Notes" ;
   PICTURES nil, nil, aStates, nil, "99", nil, 'M' ;
     VALIDS nil, nil, nil, nil, { || nAge >= 20 }, { || nSalary >= 10000 }

   ? cName, cCity, cState, lMarried, nAge, nSalary, cNotes
 
Image

In this dialog, we have checkbox for logical values, memo edit for memos, DbCombo for State, Valid check for Age and Salary, etc.

Finally, if we are not happy with the bitmaps used by default, we can modify the bitmaps with our own globally (or till next change)

What if we have more variables than the screen can accommodate? No problem. The dialog Scrolls.

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Sat Sep 06, 2014 7:25 am
by nageswaragunupudi
Incidentally MsgGet() uses TDataRow() class default Edit Dialog.

Let us see how simple it is to use TDataRow() with Data.
Simple sample that reduces a lot of coding

Code: Select all

   USE CUSTOMER NEW ALIAS CUST SHARED VIA "DBFCDX"
   TDataRow():New():Edit()
 
Result of these two lines of code:
Image

This dialog box provides complete navigation, refresh, undo and save actions.
Adequate for maintenance of a dbf.

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Sat Sep 06, 2014 9:58 am
by Carles
Nages

Great !!!

Quickly & easy


Thank you

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Sat Sep 06, 2014 1:55 pm
by joseluisysturiz
Excelente, evitar hechar algo de codigo, buenisimo para esos dialogos cortos, muchas gracias...saludos... :shock:

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Sat Sep 06, 2014 1:57 pm
by joseluisysturiz
nageswaragunupudi wrote:Incidentally MsgGet() uses TDataRow() class default Edit Dialog.

Let us see how simple it is to use TDataRow() with Data.
Simple sample that reduces a lot of coding

Code: Select all

   USE CUSTOMER NEW ALIAS CUST SHARED VIA "DBFCDX"
   TDataRow():New():Edit()
 
Result of these two lines of code:
Image

This dialog box provides complete navigation, refresh, undo and save actions.
Adequate for maintenance of a dbf.
Como se haria en MySql, por lo menos con la Dolphin.? saludos... :shock:

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Wed Oct 22, 2014 7:43 am
by lucasdebeltran
Hello,

Can we also indicate ACTION for the Gets and the BITMAP for that button, such as:

REDEFINE GET cDIRECCION ID 100 OF oDlg;
ACTION( _VerLoc( cDireccion ) ) ;
BITMAP "MNUMAPA"

Thanks!.

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Tue May 15, 2018 6:59 am
by Enrrique Vertiz
Greetings Mr. Rao

Lines above shows how to do the Edit of "all fields of a table", but if I just wanted to edit 2 or 3, NOT all, what would be the command.

This is for all :
USE CUSTOMER NEW ALIAS CUST SHARED VIA "DBFCDX"
TDataRow():New():Edit()

I need only edit two or tree colums

Thank you very much

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Tue May 15, 2018 8:31 am
by nageswaragunupudi
TDataRow():New( "CUST", "FIRST,CITY,SALARY" ):Edit()

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Fri May 18, 2018 4:08 pm
by Enrrique Vertiz
Thank you very much

Re: FWH 14.08: MsgGet() to handle arrays and Quick Dialogs

Posted: Tue May 22, 2018 4:12 pm
by joseluisysturiz
Saludos, he probado con un solo campo, en mi caso usandola para buscar un registro...pero solo acepta la entrada de datos usando el boton CHECK, si le doy ENTER en el GET, es como si hubiese cancelado, saludos...gracias... :shock: