Pra isso funcionar, tem a validação que aciona o browse:
Código: Selecionar todos
/*
frm_Validate - Validate each field
*/
#include "frm_class.ch"
FUNCTION frm_Validate( aItem, Self )
LOCAL nSelect, lFound := .T., xValue, nPos
nPos := hb_AScan( ::aControlList, { | e | e[ CFG_CTLTYPE ] == TYPE_BUTTON .AND. ;
e[ CFG_CAPTION ] == "Cancel" } )
IF nPos != 0
IF gui_IsCurrentFocus( ::oDlg, ::aControlList[ nPos, CFG_FCONTROL ] )
RETURN .T.
ENDIF
ENDIF
xValue := gui_GetTextValue( ::oDlg, aItem[ CFG_FCONTROL ] )
IF aItem[ CFG_ISKEY ]
SEEK xValue
IF ::cSelected == "INSERT"
IF ! Eof()
gui_MsgGeneric( "Código já cadastrado" )
gui_SetFocus( ::oDlg, aItem[ CFG_FCONTROL ] ) // minigui need this
RETURN .F.
ENDIF
ELSE
IF Eof()
gui_MsgGeneric( "Código não cadastrado" )
gui_SetFocus( ::oDlg, aItem[ CFG_FCONTROL ] ) // minigui need this
RETURN .F.
ENDIF
ENDIF
ENDIF
IF ! Empty( aItem[ CFG_VTABLE ] )
nSelect := Select()
SELECT ( Select( aItem[ CFG_VTABLE ] ) )
SEEK xValue
lFound := ! Eof()
xValue := FieldGet( FieldNum( aItem[ CFG_VSHOW ] ) )
SELECT ( nSelect )
IF ! lFound
frm_Browse( Self, ::oDlg, @aItem[ CFG_FCONTROL ], aItem[ CFG_VTABLE ] )
gui_SetFocus( ::oDlg, aItem[ CFG_FCONTROL ] ) // minigui need this
ENDIF
gui_SetLabelValue( ::oDlg, aItem[ CFG_VCONTROL ], xValue )
ENDIF
RETURN lFound
E a rotina de browse
Código: Selecionar todos
/*
frm_browse - browse
*/
#include "frm_class.ch"
FUNCTION frm_Browse( Self, xDlg, xControl, cTable )
LOCAL oTBrowse := {}, aItem, xValue, cField, nSelect, nPos
nSelect := Select()
SELECT ( cTable )
nPos := hb_Ascan( ::aAllSetup, { | e | e[1] == cTable } )
FOR EACH aItem IN ::aAllSetup[ nPos, 2 ]
AAdd( oTBrowse, { ;
aItem[ CFG_CAPTION ], ;
{ || Transform( FieldGet( FieldNum( aItem[ CFG_FNAME ] ) ), aItem[ CFG_FPICTURE ] ) }, ;
aItem[ CFG_FNAME ] } ) // hwgui codeblock, minigui field name
IF aItem[ CFG_ISKEY ]
cField := aItem[ CFG_FNAME ]
ENDIF
NEXT
DialogBrowse( oTBrowse, cTable, cField, @xValue )
IF ! Empty( xValue ) .AND. ! Empty( xControl )
//hwg_MsgInfo( "variable is " + Transform( xValue, "" ) )
gui_SetTextValue( xDlg, xControl, xValue )
ENDIF
SELECT ( nSelect )
(xDlg)
RETURN Nil
FUNCTION DialogBrowse( oTBrowse, cTable, cField, xValue )
LOCAL oThisForm, aItem
oThisForm := frm_Class():New()
oThisForm:cOptions := ""
gui_CreateDialog( @oThisForm:oDlg, 0, 0, oThisForm:nDlgWidth, oThisForm:nDlgHeight, cTable, { || Nil }, ;
{ || aItem[ CFG_FCONTROL ]:SetFocus() } )
frm_Buttons( oThisForm, .F. )
AAdd( oThisForm:aControlList, CFG_EMPTY )
aItem := Atail( oThisForm:aControlList )
aItem[ CFG_CTLTYPE ] := TYPE_BROWSE
gui_Browse( oThisForm:oDlg, @aItem[ CFG_FCONTROL ], 70, 5, ;
oThisForm:nDlgWidth - 10, oThisForm:nDlgHeight - 80, ;
oTbrowse, cField, @xValue, cTable )
gui_ActivateDialog( oThisForm:oDlg )
RETURN Nil
Os fontes nem sabem qual é a LIB em uso.
Tá muito doido isso, e tá funcionando !!!
Só separei as LIBs desse jeito porque o fonte estava ficando mais complicado do que já é, com fonte de tudo que é LIB.
O resultado é esse que estão vendo: um "aplicativo" que funciona com qualquer LIB.
Apenas estou fazendo conforme vou precisando, o último adicionado foi o browse, primeiro hwgui e agora HMG.