Basicamente é simples. Inclusive isto é nativo não precisa de bibliotecas a parte nem nada. O comando get tb ja esta pronto nao precisa de arquivos cabeçalho (.CH), basta usar.
(colei do NG)
║ @...GET CHECK Create a new check box Get object and display it
║ @...GET LIST Create a new list box Get object and display it
║ @...GET PUSH Create a new push button Get object and display it
║ @...GET RADIO Create a new radio button group Get object and display it
O legal desses recurcos é que vc muda a estrutura do prog. podendo inclusive eliminar aquele famoso DO WHILE .T. no inicio de uma serie de gets ao numa tela de cadastro por exemplo.
No exemplo abaixo o botao SALVAR chama a funcao que inclui o registro, obviamente ela tb faz as consistências que se fizerem necessárias.
Veja um trecho de um prog.
Código: Selecionar todos
...
...
@ 14,45,22,55 GET aProd[PROD_TIPO] LISTBOX aGrupo CAPTION "Gr/Tipo Prod:";
WHEN {|og| og:varput( IIf(SubStr(aProd[PROD_CODPROD],1,1)=="4","F","M")), .T. };
DROPDOWN SCROLLBAR
@ 16,24 GET aProd[PROD_UNID] PICT "@X" CAPTION "&Unidade:"
@ 16,45 GET aProd[PROD_DTINCL] PICT "@D" ;
CAPTION "Dt.&Incl:";
WHEN !(ValType( nRecProd ) == "N");
VALID aProd[PROD_DTINCL] <= Date()
@ 21,42 GET lButton PUSHBUTTON CAPTION " &SALVAR ";
STATE {|| ReadKill( SalvaProd( @aProd, lIncl)) }
@ 21,54 GET lButton PUSHBUTTON CAPTION "CANCELA&R";
STATE {|| lAbort:=.T., ReadKill( lAbort ) }
@ 21,66 GET lButton PUSHBUTTON CAPTION " S&AIR ";
STATE {|s| lAbort:=!(Updated()), ReadKill(.T.) } //.AND. Alert("SAIR sem Gravar ?",{"NÇO","SIM"})==1,SalvaProd(@aProd,lIncl),.T.), ReadKill(s) }
@ 21,03 GET lButton PUSHBUTTON CAPTION " E&XCLUIR ";
WHEN .NOT. lIncl;
STATE {|| lAbort:=.T.,ReadKill( ExclProd( nRecProd ))}
READ
..
..
Valeu !