Saludos, estoy incursionando en los dialogos NO MODAL, he creado mi VENTANA MDICHILD con una BUTTONBAR, mi DIALOGO NOWAIT y este a su vez contiene un FOLDER de 2 pestañas, la 1ra.con un XBROWSE y la 2da.con los GET de datos a solicitar, todo esto son RECURSOS, hasta aca todo bien. Mi problema es el siguiente, en las validaciones no hayo como hacer para que cuando le doy click al boton de la BUTTONBAR NUEVO y al de MODIFICAR, pase el focus al 1er.GET, le paso el focus a la pestaña 2 donde estan los GET ya que por defecto lo 1ro.a mostrar el la pèstaña 1 don el XBROWSE, intente 2 maneras colocando los objetos y variables en funciones diferenntes por cada pestaña y entonces sale el ERROR de duplicidad de IDE, coloque los GET y VAR en la misma funcion donde estan todos los controles y la BUTTONBAR, y entonces nunca me toma en cuenta las validacion del WHEN del GET, como sino existieran los GET, de verdad nose que estoy haciendo mal, revise el sample ADORICK.PRG que mas o menos hace lo que quier, pero no vi ni encontre solucion a mi problema, para muestra un boton y una imagen dice mas que mil palabras, aca anexo imagen y el prg que uso.saludos...
Uploaded with ImageShack.us
Uploaded with ImageShack.us
OBJETOS DE LAS PESTAÑAS EN FUNCIONES DIFERENTES...
- Code: Select all Expand view
- #include "FiveWin.ch"
#include "XBrowse.ch"
MEMVAR oDatos
STATIC oWndGrupos, oBrw, aBtnBar[10], oBar, aVar[3], aGet[3], lNew
STATIC emp_codigo := "PRUEBA"
STATIC user_codigo := "JL"
FUNCTION mgrupos()
LOCAL oDlg, oFldx, oError, cQry, oQry
TGet():lDisColors := .f.
cQry := "SELECT * FROM inv_grupos " +;
"WHERE empresa_id = '" + emp_codigo + "' " +;
"ORDER BY gru_codigo, gru_nombre ASC"
TRY
oQry := TDolphinQry():New( cQry, oDatos:oConex )
CATCH oError
MSGSTOP( oError:description() + CRLF + CRLF + ;
"Error Ejecución de Sentencia en Tabla(inv_grupos): " + ;
CRLF + CRLF + cQry, oDatos:cTitMsg )
RETURN NIL
END
IF oWndGrupos == NIL
// DEFINO WND
DEFINE WINDOW oWndGrupos BORDER SINGLE MDICHILD ;
STYLE nOr( WS_CAPTION, WS_VISIBLE, WS_SYSMENU, WS_MINIMIZEBOX ) ;
FROM 0, 1.0 TO 30.0, 107.0 ;
TITLE oDatos:cTit + "- Maestro de Grupos" ;
OF oDatos:oWndPPAL
// DEFINO BARRA DE BOTONES Y BOTONES
DEFINE BUTTONBAR oBar SIZE 50, 50 OF oWndGrupos 2010
oBar:bRClicked := {|| NIL }
DEFINE BUTTON aBtnBar[1] OF oBar NOBORDER GROUP ;
RESOURCE "NUEVO32" ;
Tooltip "Crear Registro" ;
ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:UPDATE(), oFldx:REFRESH() ,;
pestana_2( oFldx, oQry ) )
DEFINE BUTTON aBtnBar[2] OF oBar NOBORDER ;
RESOURCE "MODIFI32" ;
Tooltip "Modificar Registro" ;
ACTION ( lNew := .f., oFldx:SetOption(2), oFldx:UPDATE(), oFldx:REFRESH() ,;
pestana_2( oFldx, oQry ) ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[3] OF oBar NOBORDER ;
RESOURCE "ELIMI32" ;
Tooltip "Eliminar Registros" ;
ACTION ( eliminar( oQry, oBrw, "gru_codigo" ) ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[4] OF oBar NOBORDER ;
RESOURCE "SALVAR32" ;
Tooltip "Grabar los Datos" ;
ACTION ( grabagrupo() ) ;
WHEN ( lNew <> NIL )
DEFINE BUTTON aBtnBar[5] OF oBar NOBORDER ;
RESOURCE "EXPOR32" ;
Tooltip "Exportar los Datos" ;
ACTION ( MSGINFO("Botones de la BAR") ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[9] OF oBar NOBORDER GROUP ;
RESOURCE "PRINT32" ;
Tooltip "Imprimir Listado" ;
ACTION ( oBrw:REPORT() ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[10] OF oBar NOBORDER GROUP ;
RESOURCE "SALIR32" ;
Tooltip "Salir al Menu" ;
ACTION ( lNew := NIL, oWndGrupos:END() )
aBtnBar[10]:lCancel := .t.
SET MESSAGE OF oWndGrupos TO " Inventario - Maestro de Grupos" 2007
// DEFINO DLG
DEFINE DIALOG oDlg RESOURCE "DLG_NOWAIT" OF oWndGrupos
// DEFINO FOLDER
REDEFINE FOLDEREX oFldx ID 401 OF oDlg ;
PROMPT "Listado", "Datos" ;
BITMAPS "CONFIG16", "GRUPO16" ;
DIALOGS "INV_BROWSE", "INV_CORTOS"
pestana_1( oFldx, oQry )
pestana_2( oFldx, oQry )
ACTIVATE DIALOG oDlg NOWAIT ON CLICK oDlg:UPDATE ;
ON INIT ( oDlg:MOVE( oBar:nHeight, 0 ) ) ;
VALID( !GETKEYSTATE( 27 ) )//VALID ( .f. )
ACTIVATE WINDOW oWndGrupos ;//ON INIT ( oFldx:SetFocus() ) ;
ON INIT oWndGrupos:SetSize( oDlg:nWidth, oDlg:nHeight, .t. ) ;
VALID ( oWndGrupos := NIL, .t. )
ELSE
oWndGrupos:Restore()
oWndGrupos:SetFocus()
ENDIF
RETURN NIL
STATIC FUNCTION pestana_1( oFldx, oQry )
LOCAL aCampos := {}
aCampos := {"gru_codigo", "gru_nombre"}
oBrw := TXBrowse():New( oFldx:aDialogs[1] )
WITH OBJECT oBrw
:SetDolphin( oQry, .t., .t., aCampos )
:nMarqueeStyle := MARQSTYLE_HIGHLROW
:nStretchCol := STRETCHCOL_LAST // STRETCHCOL_WIDEST
:lColDividerComplete := .t.
:lAllowColHiding := .f.
:nHeaderHeight := 30
:lFooter := .t.
:lRecordSelector := .t.
:bClrStd := {|| IF( oQry:RecNo() % 2 == 0, {CLR_BLACK, CLR_WHITE} ,;
{0, RGB(203,226,254)} ) }
END WITH
WITH OBJECT oBrw:aCols[1]
:cHeader := "Código"
:bEditValue := {|| IIF( oQry:LastRec() == 0, SPACE(10) ,;
oQry:gru_codigo ) }
:nHeadStrAlign := AL_CENTER
:nDataStrAlign := AL_LEFT
:nWidth := 100
END WITH
WITH OBJECT oBrw:aCols[2]
:cHeader := "Nombre / Descripción"
:bEditValue := {|| IIF( oQry:LastRec() == 0, SPACE(10) ,;
oQry:gru_nombre ) }
:nHeadStrAlign := AL_CENTER
:nDataStrAlign := AL_LEFT
:nWidth := 200
END WITH
oBrw:CreateFromResource(100)
oBrw:GOTOP(); oBrw:REFRESH()
RETURN NIL
STATIC FUNCTION pestana_2( oFldx, oQry )
oQry:REFRESH()
aVar[1] := IF( lNew == .t., SPACE(10), IF( lNew == .f., oQry:gru_codigo, ) )
aVar[2] := IF( lNew == .t., SPACE(50), IF( lNew == .f., oQry:gru_nombre, ) )
aVar[3] := IF( lNew == .t., SPACE(10), IF( lNew == .f., oQry:gru_observa, ) )
REDEFINE GET aGet[1] VAR aVar[1] ID 4004 PICTURE "@!" OF oFldx:aDialogs[2] UPDATE ;
VALID ( existe( oQry, aVar[1], aGet[1], "gru_codigo" ) ) ;
WHEN ( lNew == .t. )
REDEFINE GET aGet[2] VAR aVar[2] ID 4005 OF oFldx:aDialogs[2] UPDATE ;
VALID ( novacio( aVar[2] ) ) ;
WHEN ( !EMPTY( aVar[1] ) )
REDEFINE GET aGet[2] VAR aVar[2] MEMO ID 199 OF oFldx:aDialogs[2] UPDATE ; //MULTILINE
WHEN ( !EMPTY( aVar[2] ) )
RETURN NIL
---------------------------------------------------------------------------------------
CON LOS OBJETOS EN LA MISMA FUNCION DONDE ESTA LA BUTTONBAR, DLG, FOLDER, WND...
- Code: Select all Expand view
- #include "FiveWin.ch"
#include "XBrowse.ch"
MEMVAR oDatos
STATIC oWndGrupos, oBrw, aBtnBar[10], oBar, aVar[3], aGet[3], lNew
STATIC emp_codigo := "PRUEBA"
STATIC user_codigo := "JL"
FUNCTION mgrupos()
LOCAL oDlg, oFldx, oError, cQry, oQry, aCampos := {}
TGet():lDisColors := .f.
cQry := "SELECT * FROM inv_grupos " +;
"WHERE empresa_id = '" + emp_codigo + "' " +;
"ORDER BY gru_codigo, gru_nombre ASC"
TRY
oQry := TDolphinQry():New( cQry, oDatos:oConex )
CATCH oError
MSGSTOP( oError:description() + CRLF + CRLF + ;
"Error Ejecución de Sentencia en Tabla(inv_grupos): " + ;
CRLF + CRLF + cQry, oDatos:cTitMsg )
RETURN NIL
END
IF oWndGrupos == NIL
// DEFINO WND
DEFINE WINDOW oWndGrupos BORDER SINGLE MDICHILD ;
STYLE nOr( WS_CAPTION, WS_VISIBLE, WS_SYSMENU, WS_MINIMIZEBOX ) ;
FROM 0, 1.0 TO 30.0, 107.0 ;
TITLE oDatos:cTit + "- Maestro de Grupos" ;
OF oDatos:oWndPPAL
// DEFINO BARRA DE BOTONES Y BOTONES
DEFINE BUTTONBAR oBar SIZE 50, 50 OF oWndGrupos 2010
oBar:bRClicked := {|| NIL }
DEFINE BUTTON aBtnBar[1] OF oBar NOBORDER GROUP ;
RESOURCE "NUEVO32" ;
Tooltip "Crear Registro" ;
ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:UPDATE(), oFldx:REFRESH() ,;
aGet[1]:SetFocus(), aGet[1]:UPDATE(), aGet[1]:REFRESH() )
DEFINE BUTTON aBtnBar[2] OF oBar NOBORDER ;
RESOURCE "MODIFI32" ;
Tooltip "Modificar Registro" ;
ACTION ( lNew := .f., oFldx:SetOption(2), oFldx:UPDATE(), oFldx:REFRESH() ,;
aGet[2]:SetFocus(), aGet[2]:UPDATE(), aGet[2]:REFRESH() ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[3] OF oBar NOBORDER ;
RESOURCE "ELIMI32" ;
Tooltip "Eliminar Registros" ;
ACTION ( eliminar( oQry, oBrw, "gru_codigo" ) ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[4] OF oBar NOBORDER ;
RESOURCE "SALVAR32" ;
Tooltip "Grabar los Datos" ;
ACTION ( grabagrupo() ) ;
WHEN ( lNew <> NIL )
DEFINE BUTTON aBtnBar[5] OF oBar NOBORDER ;
RESOURCE "EXPOR32" ;
Tooltip "Exportar los Datos" ;
ACTION ( MSGINFO("Botones de la BAR") ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[9] OF oBar NOBORDER GROUP ;
RESOURCE "PRINT32" ;
Tooltip "Imprimir Listado" ;
ACTION ( oBrw:REPORT() ) ;
WHEN ( oQry:RecCount() > 0 )
DEFINE BUTTON aBtnBar[10] OF oBar NOBORDER GROUP ;
RESOURCE "SALIR32" ;
Tooltip "Salir al Menu" ;
ACTION ( lNew := NIL, oWndGrupos:END() )
aBtnBar[10]:lCancel := .t.
SET MESSAGE OF oWndGrupos TO " Inventario - Maestro de Grupos" 2007
// DEFINO VAR
aVar[1] := IF( lNew == .t., SPACE(10), IF( lNew == .f., oQry:gru_codigo, ) )
aVar[2] := IF( lNew == .t., SPACE(50), IF( lNew == .f., oQry:gru_nombre, ) )
aVar[3] := IF( lNew == .t., SPACE(10), IF( lNew == .f., oQry:gru_observa, ) )
// DEFINO DLG
DEFINE DIALOG oDlg RESOURCE "DLG_NOWAIT" OF oWndGrupos
// DEFINO FOLDER
REDEFINE FOLDEREX oFldx ID 401 OF oDlg ;
PROMPT "Listado", "Datos" ;
BITMAPS "CONFIG16", "GRUPO16" ;
DIALOGS "INV_BROWSE", "INV_CORTOS"
// DIALOGO 1
aCampos := {"gru_codigo", "gru_nombre"}
oBrw := TXBrowse():New( oFldx:aDialogs[1] )
WITH OBJECT oBrw
:SetDolphin( oQry, .t., .t., aCampos )
:nMarqueeStyle := MARQSTYLE_HIGHLROW
:nStretchCol := STRETCHCOL_LAST
:lColDividerComplete := .t.
:lAllowColHiding := .f.
:nHeaderHeight := 30
:lFooter := .t.
:lRecordSelector := .t.
:bClrStd := {|| IF( oQry:RecNo() % 2 == 0, {CLR_BLACK, CLR_WHITE} ,;
{0, RGB(203,226,254)} ) }
END WITH
WITH OBJECT oBrw:aCols[1]
:cHeader := "Código"
:bEditValue := {|| IIF( oQry:LastRec() == 0, SPACE(10) ,;
oQry:gru_codigo ) }
:nHeadStrAlign := AL_CENTER
:nDataStrAlign := AL_LEFT
:nWidth := 100
END WITH
WITH OBJECT oBrw:aCols[2]
:cHeader := "Nombre / Descripción"
:bEditValue := {|| IIF( oQry:LastRec() == 0, SPACE(10) ,;
oQry:gru_nombre ) }
:nHeadStrAlign := AL_CENTER
:nDataStrAlign := AL_LEFT
:nWidth := 200
END WITH
oBrw:CreateFromResource(100)
oBrw:GOTOP(); oBrw:REFRESH()
// DIALOGO 2
REDEFINE GET aGet[1] VAR aVar[1] ID 4004 PICTURE "@!" OF oFldx:aDialogs[2] UPDATE ;
VALID ( existe( oQry, aVar[1], aGet[1], "gru_codigo" ) ) ;
WHEN ( lNew == .t. )
REDEFINE GET aGet[2] VAR aVar[2] ID 4005 OF oFldx:aDialogs[2] UPDATE ;
VALID ( novacio( aVar[2] ) ) ;
WHEN ( !EMPTY( aVar[1] ) )
REDEFINE GET aGet[2] VAR aVar[2] MEMO ID 199 OF oFldx:aDialogs[2] UPDATE ;
WHEN ( !EMPTY( aVar[2] ) )
ACTIVATE DIALOG oDlg NOWAIT ON CLICK oDlg:UPDATE ;
ON INIT ( oDlg:MOVE( oBar:nHeight, 0 ) ) ;
VALID( !GETKEYSTATE( 27 ) )//VALID ( .f. )
ACTIVATE WINDOW oWndGrupos ;//ON INIT ( oFldx:SetFocus() ) ;
ON INIT oWndGrupos:SetSize( oDlg:nWidth, oDlg:nHeight, .t. ) ;
VALID ( oWndGrupos := NIL, .t. )
ELSE
oWndGrupos:Restore()
oWndGrupos:SetFocus()
ENDIF
RETURN NIL