FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour WHEN MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER-SOLUCIONADO
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
WHEN MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER-SOLUCIONADO
Posted: Sun Mar 10, 2013 03:45 AM
VALIDACIONES CON VENTANA MDICHILD CON BUTTONBAR / DLG NOMODAL CON UN FOLDER DE 2 PESTA脩AS...

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 (fw): Select all Collapse
#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 (fw): Select all Collapse
#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
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Sun Mar 10, 2013 04:13 PM
Jos茅 Luis:

Intenta poniendo en el bot贸n "nuevo" la l铆nea oFld:nOption := 2

Code (fw): Select all Collapse
    oFld:SetOption(2)
    oFld:nOption := 2


Y despu茅s, en la funci贸n Pesta帽a2() asignas el foco al get.

Code (fw): Select all Collapse
    aGet[1]:SetFocus()


Espero que esto te desatore.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Sun Mar 10, 2013 07:36 PM
Armando, tu sugerencia ya la habia probado, es mas, fue lo primero que probe, luego por sugerencias de colegas lo cambie por setoption, el problema esta en la validacion de los WHEN en los GET, ya que el cambio de pesta帽a lo hace bien, per no le da el focus al control que le digo aunque la VAR lNew tenga el valor correspondiente que valida el WHEN, si algun colega tiene algo parecido o alguna sugerencia, bien agradecida sera, espero alguna ayuda o sugerencia, principalmente de los que ya dominan DLG NOMODAL, gracias y saludos...

CODIGO ACTUAL

Code (fw): Select all Collapse
MEMVAR oDatos

STATIC oWndGrupos, oBrw, aBtnBar[10], oBar, aVar[3], aGet[3], lNew, oFldx

STATIC emp_codigo := "PRUEBA"
STATIC user_codigo := "JL"

FUNCTION mgrupos()    //

   LOCAL oDlg, oError, cQry, oQry, aCampos := {}

   lNew := .t.
*   aVar[1] := SPACE(10)
*   aVar[2] := SPACE(50)
*   aVar[3] := SPACE(10)

   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., cargadata( oQry ), oFldx:SetOption(2), oFldx:nOption := 2, oFldx:Refresh() )

      DEFINE BUTTON aBtnBar[2] OF oBar NOBORDER ;
         RESOURCE "MODIFI32" ;
         Tooltip "Modificar Registro" ;
         ACTION ( lNew := .f., cargadata( oQry ), oFldx:SetOption(2), oFldx: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 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 )

      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[3] VAR aVar[3] 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


STATIC PROCEDURE cargadata( oQry )

   LOCAL nFor := 0

*? lnew

   aVar[1] := IF( lNew, SPACE(10), oQry:gru_codigo )
   aVar[2] := IF( lNew, SPACE(50), oQry:gru_nombre )
   aVar[3] := IF( lNew, SPACE(10), oQry:gru_observa )

   IF( lNew, aGet[1]:SetFocus(), aGet[2]:SetFocus() )

   FOR nFor := 1 To LEN( aGet )
      aGet[nFor]:REFRESH()

   NEXT

   sysrefresh()

RETURN
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 01:07 AM
Jos茅 Luis:

Solo por probar, cambia la funci贸n cargadata( oQry ) despu茅s de oFldx:nOption := 2
Code (fw): Select all Collapse
ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:nOption := 2, cargadata( oQry ), oFldx:Refresh() )


Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 02:38 AM
Armando wrote:Jos茅 Luis:

Solo por probar, cambia la funci贸n cargadata( oQry ) despu茅s de oFldx:nOption := 2
Code (fw): Select all Collapse
ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:nOption := 2, cargadata( oQry ), oFldx:Refresh() )


Saludos

Armado, las probe en todas las posiciones y nada, sigo con el mismo problema, no da el focus donde le digo...a veces cierro y abro el modulo y entonce lo toma y otras veces no...no mantiene el valor de la VAR lNew que valida el WHEN en los GET, saludos... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 07:32 AM

Jose Luis,

Has probado a hacer: oFldx:aDialogs[ 2 ]:SetFocus() ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 04:01 PM
Antonio Linares wrote:Jose Luis,

Has probado a hacer: oFldx:aDialogs[ 2 ]:SetFocus() ?

Antonio, probe tu sugerencia y nada, el sistema si da el focus oFldx:SetOption(2) y con Fldx:aDialogs[2]:SetFocus(), el detalle sigue siendo el los GET, no entiendo porque no da el focus al GET que le digo segun la condicion de lNew que es el que valida WHEN, es mas, al hacer el cambio de pesta帽a al pulsar los botones nuevo o modificar, los GET ya mandan los mensajes de VALID donde verifico que no se repita campo entrar o que no quede vacio la VAR del GET 1, es como si se ejecutara de forma automatica cuando el folder 2 tiene el focus, pero no le para al setfocus, anexo codigo de los botones y funcion donde valido lNew, las VAR y los GET son de tipo STATIC, saludos... :-)

BOTONES
Code (fw): Select all Collapse
      DEFINE BUTTON aBtnBar[1] OF oBar NOBORDER GROUP ;
         RESOURCE "NUEVO32" ;
         Tooltip "Crear Registro" ;
         ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:aDialogs[2]:SetFocus(), oFldx:Refresh(), cargadata( oQry ) )
*         ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:Refresh(), cargadata( oQry ) )

      DEFINE BUTTON aBtnBar[2] OF oBar NOBORDER ;
         RESOURCE "MODIFI32" ;
         Tooltip "Modificar Registro" ;
         ACTION ( lNew := .f., oFldx:SetOption(2), oFldx:aDialogs[2]:SetFocus(), oFldx:Refresh(), cargadata( oQry ) ) ;
         WHEN ( oQry:RecCount() > 0 )
*         ACTION ( lNew := .f., oFldx:SetOption(2), oFldx:Refresh(), cargadata( oQry ) ) ;


FUNCION cargadata
Code (fw): Select all Collapse
STATIC PROCEDURE cargadata( oQry )

   LOCAL nFor := 0

*? lnew

   aVar[1] := IF( lNew, SPACE(10), oQry:gru_codigo )
   aVar[2] := IF( lNew, SPACE(50), oQry:gru_nombre )
   aVar[3] := IF( lNew, SPACE(10), oQry:gru_observa )

   IF( lNew, aGet[1]:SetFocus(), aGet[2]:SetFocus() )

   FOR nFor := 1 To LEN( aGet )
      aGet[nFor]:REFRESH()

   NEXT

*   sysrefresh()

RETURN
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 04:22 PM
Jos茅 Luis:

Acci贸n desesperada, haz estos cambios a la funci贸n CargaData()

Code (fw): Select all Collapse
STATIC PROCEDURE cargadata( oQry )
聽 聽aVar[1] := IF( lNew, SPACE(10), oQry:gru_codigo )
聽 聽aVar[2] := IF( lNew, SPACE(50), oQry:gru_nombre )
聽 聽aVar[3] := IF( lNew, SPACE(10), oQry:gru_observa )

聽 聽IF lNew
聽 聽 聽 聽aGet[1]:SetFocus()
聽 聽 聽 聽aBtnBar[1]:oJump := aGet[1]
聽 聽ELSE
聽 聽 聽 聽aGet[2]:SetFocus()
聽 聽 聽 聽aBtnBar[1]:oJump := aGet[2]
聽 聽ENDIF
RETURN


Espero ayudar, saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 05:00 PM
Armando, nada, siempre toma por defecto el GET 1 y es lo que no entiendo, PORQUE NO TOMA EL CUENTA LA CONDICION DEL WHEN.? ya me tiene hechando humo, seguire en otros modulos mientras aparecen nuevas ideas, aca dejare como esta el codigo hasta los momentos, quizas alguien vea algo que no hemos visto o de otras sugerencias, gracias, saludos... :-)

Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "XBrowse.ch"

MEMVAR oDatos

STATIC oWndGrupos, oBrw, aBtnBar[10], oBar, lNew, oFldx//, aVar[3], aGet[3]

STATIC emp_codigo := "PRUEBA"
STATIC user_codigo := "JL"

FUNCTION mgrupos() // MAESRTO DE GRUPOS

聽 聽LOCAL oDlg, oError, cQry, oQry, aCampos := {}, aVar[3], aGet[3]

聽 聽lNew := .t.
* 聽 aVar[1] := SPACE(10)
* 聽 aVar[2] := SPACE(50)
* 聽 aVar[3] := SPACE(10)

聽 聽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:aDialogs[2]:SetFocus(), cargadata( oQry, aVar, aGet ), oFldx:UpDate() )
* 聽 聽 聽 聽 ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:Refresh(), cargadata( oQry ) )

聽 聽 聽 DEFINE BUTTON aBtnBar[2] OF oBar NOBORDER ;
聽 聽 聽 聽 聽RESOURCE "MODIFI32" ;
聽 聽 聽 聽 聽Tooltip "Modificar Registro" ;
聽 聽 聽 聽 聽ACTION ( lNew := .f., oFldx:SetOption(2), oFldx:aDialogs[2]:SetFocus(), cargadata( oQry, aVar, aGet ), oFldx:UpDate() ) ;
聽 聽 聽 聽 聽WHEN ( oQry:RecCount() > 0 )
* 聽 聽 聽 聽 ACTION ( lNew := .f., oFldx:SetOption(2), oFldx:Refresh(), cargadata( oQry ) ) ;

聽 聽 聽 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( oQry, aVar ) )

聽 聽 聽 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"

// 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 )

聽 聽 聽 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[3] VAR aVar[3] 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


PROCEDURE grabagrupo( oQry, aVar )

聽 聽LOCAL cSql, oError

聽 聽IF EMPTY( aVar[1] )
聽 聽 聽 MSGALERT( "Campo C贸digo es Obligatorio", oDatos:cTitMsg )
聽 聽 聽 RETURN

聽 聽ENDIF

聽 聽IF EMPTY( aVar[2] )
聽 聽 聽 MSGALERT( "Campo Nombre es Obligatorio", oDatos:cTitMsg )
聽 聽 聽 RETURN

聽 聽ENDIF


聽 聽IF lNew
聽 聽 聽 cSql := "INSERT INTO inv_grupos SET "
聽 聽 聽 cSql += "gru_codigo=" + ClipValue2SQL( Val2Escape( aVar[1] ) ) + ","

聽 聽ELSE
聽 聽 聽 cSql := "UPDATE inv_grupos SET "

聽 聽ENDIF

聽 聽cSql += "gru_nombre=" + ClipValue2SQL( Val2Escape( aVar[2] ) ) + ","
聽 聽cSql += "gru_observa=" + ClipValue2SQL( Val2Escape( aVar[3] ) ) + ","
//
聽 聽cSql += "usuario=" + ClipValue2SQL( Val2Escape( user_codigo ) ) + ","
聽 聽cSql += "fch_crea=" + ClipValue2SQL( DATE() ) + ","
聽 聽cSql += "empresa_id=" + ClipValue2SQL( Val2Escape( emp_codigo ) )

聽 聽IF !lNew
聽 聽 聽 cSql += " WHERE gru_codigo = '" + aVar[1] +;
聽 聽 聽 "' AND empresa_id = '" + emp_codigo + "' "

聽 聽ENDIF

聽 聽TRY
聽 聽 聽 oDatos:oConex:Execute( cSql )

聽 聽CATCH oError
聽 聽 聽 MSGSTOP( oError:description() + CRLF + CRLF + ;
聽 聽 聽 聽 聽 聽 聽 聽"Error Grabando en Tabla (inv_grupos), Sentencia " + CRLF + CRLF +;
聽 聽 聽 聽 聽 聽 聽 聽cSql, oDatos:cTitMsg )

聽 聽 聽 RETURN

聽 聽END

聽 聽oFldx:SetOption(1); oFldx:UPDATE()

聽 聽oQry:REFRESH(); oBrw:GOTOP(); oBrw:REFRESH()

聽 聽lNew := .t.

RETURN


STATIC PROCEDURE cargadata( oQry, aVar, aGet )

聽 聽LOCAL nFor := 0

*? lnew

聽 聽aVar[1] := IF( lNew, SPACE(10), oQry:gru_codigo )
聽 聽aVar[2] := IF( lNew, SPACE(50), oQry:gru_nombre )
聽 聽aVar[3] := IF( lNew, SPACE(10), oQry:gru_observa )

* 聽 IF( lNew, aGet[1]:SetFocus(), aGet[2]:SetFocus() )

聽 聽IF lNew
聽 聽 聽 聽aGet[1]:SetFocus()
聽 聽 聽 聽aBtnBar[1]:oJump := aGet[1]

聽 聽ELSE
聽 聽 聽 聽aGet[2]:SetFocus()
聽 聽 聽 聽aBtnBar[2]:oJump := aGet[2]

聽 聽ENDIF

聽 聽FOR nFor := 1 To LEN( aGet )
聽 聽 聽 aGet[nFor]:REFRESH()

聽 聽NEXT

* 聽 sysrefresh()

RETURN


.RC
Code (fw): Select all Collapse
// RESOURCE SCRIPT generated by "Pelles C for Windows, version 7.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_SPANISH,SUBLANG_SPANISH_VENEZUELA

1 MANIFEST "res1.xml"

SALIR32 BITMAP "res2.bmp"

SALVAR32 BITMAP "res3.bmp"

PRINT32 BITMAP "res4.bmp"

CANCEL32 BITMAP "res5.bmp"

ELIMI32 BITMAP "res6.bmp"

MODIFI32 BITMAP "res7.bmp"

NUEVO32 BITMAP "res8.bmp"

PRUEBA BITMAP "res9.bmp"

OPEN BITMAP "res10.bmp"

ICONWPPAL ICON "res1.ico"

INV32 BITMAP "res11.bmp"

OK32 BITMAP "res12.bmp"

ORDEN32 BITMAP "res13.bmp"

GRUPO32 BITMAP "res14.bmp"

CONFIG32 BITMAP "res15.bmp"

DLG_NOWAIT DIALOG DISCARDABLE 0, 0, 400, 260
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
  CONTROL "TFolderex", 401, "TFolderex", WS_TABSTOP, 5, 5, 385, 170
  CONTROL "Aqui...", 4001, "Static", WS_GROUP, 6, 182, 40, 8
}

INV_CORTOS DIALOG DISCARDABLE 0, 0, 380, 155
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
  CONTROL "C-001", 4004, "Edit", WS_BORDER|WS_TABSTOP, 43, 27, 50, 12
  CONTROL "chocalate cri-cri de 100grs", 4005, "Edit", ES_AUTOHSCROLL|WS_BORDER|WS_TABSTOP, 43, 45, 150, 12
  CONTROL "C贸digo", -1, "Static", SS_RIGHT|WS_GROUP, 7, 31, 30, 8
  CONTROL " Observaciones ", 4012, "Button", BS_GROUPBOX, 199, 5, 175, 140
  CONTROL "Nombre", 4001, "Static", SS_RIGHT|WS_GROUP, 7, 49, 30, 8
  CONTROL " Datos Principales ", 4003, "Button", BS_GROUPBOX, 5, 5, 195, 140
  CONTROL "", 199, "Edit", ES_MULTILINE|ES_AUTOVSCROLL|ES_WANTRETURN|WS_VSCROLL|WS_BORDER|WS_TABSTOP, 204, 20, 165, 115
}

GRUPO16 BITMAP "res16.bmp"

CONFIG16 BITMAP "res17.bmp"

INV_BROWSE DIALOG DISCARDABLE 0, 0, 385, 155
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
  CONTROL "TXBROWSE", 100, "TXBROWSE", WS_TABSTOP|0x00300000, 5, 5, 370, 140
}

SALVAR16 BITMAP "res18.bmp"

EXPOR32 BITMAP "res19.bmp"

EXPOR16 BITMAP "res20.bmp"
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 05:25 PM
Jos茅 Luis:

Una m谩s.

Code (fw): Select all Collapse
STATIC PROCEDURE cargadata( oQry )
   aVar[1] := IF( lNew, SPACE(10), oQry:gru_codigo )
   aVar[2] := IF( lNew, SPACE(50), oQry:gru_nombre )
   aVar[3] := IF( lNew, SPACE(10), oQry:gru_observa )

   IF lNew
       aGet[1]:SetFocus()
       aBtnBar[1]:oJump := aGet[1]
   ELSE
       aGet[2]:SetFocus()
       aBtnBar[2]:oJump := aGet[2]
   ENDIF

   oFldx:aDialogs[2]:UPDATE()

/*
   FOR nFor := 1 To LEN( aGet )
      aGet[nFor]:REFRESH()

   NEXT
*/
RETURN


Asumo que lNew es correcto, cierto?
es decir es true para un nuevo registro y false para una modificaci贸n.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 05:42 PM
Armando, lNew es correcto, si miras el codigo publicado la veras en la funcion mgrupos debajo de las LOCAL, lNew es de tipo STATIC y dentro de la funcion mgrupos() le doy valor de inicializacion a .t., lNew := .t., pero esta VAR solo me controla si lo que hago es AGREGAR o MODIFICAR un registro, como sigo insistiendo, el problema esta EN LA VALIDACION DEL WHEN en el GET 1, solo lo valida cuando se inicia la funcion mgrupos() desde el menu ppal., pero cuando pulso los botones NUEVO o MODIFICAR, me inicial correctamente las VAR, en nuevo inician en blanco y en modificar me trae los valores de la tabla, el detalle esta que cuando MODIFICO el focus no queda en el GET 2 sino en el GET 1 y ademas, asume como si se pulsara ENTER ya que de inmediato envia el mensaje que el valor ya existe el cual es la var 1, get 1 que es el campo clave, si puedes copia y corre el .prg para que veas lo que digo, por logica pareciera todo esta bien, pero al momento de la ejecucion, algo no esta funcionando correctamente o esta fuera de lugar, ya que aunque lNew es .f., igual queda en edicion el GET 1, saludos... :-)

Code (fw): Select all Collapse
 聽 聽 聽
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 )

REDEFINE GET aGet[2] VAR aVar[2] ID 4005 OF oFldx:aDialogs[2] UPDATE ;
聽 聽 聽 聽 聽VALID ( novacio( aVar[2] ) ) ;
聽 聽 聽 聽 聽WHEN ( !EMPTY( aVar[1] ) )
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 07:36 PM
Jos茅 Luis,

La siguiente funci贸n a mi me ha sacado de un mont贸n de problemas de "focos". No es muy ortodoxa, pero s铆 pr谩ctica. Util铆zala para hacer el cambio de foco.

Ejemplo de uso: xSetFocus( IF( lNew, aGet[1], aGet[2] ) )

Code (fw): Select all Collapse
FUNCTION xSetFocus(oObj, nInterval)
Local oTiempo
DEFAULT nInterval:= 10   
DEFINE Timer oTiempo Interval nInterval OF oObj:oWnd ;
            ACTION (oObj:SetFocus(),oTiempo:Deactivate())
ACTIVATE Timer oTiempo
RETURN NIL


Saludos
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 08:37 PM

De verdad ya no hayo que intentar, no creo que esto sea tan dificil, pero he probado las mil y unas formas y las sugerencias y nada, continua el problema con el FOCUS y el WHEN, lo probe en una dialogo normal sin ventana y todo correo sin problema, pero necesito tenerlo en ventana para poder abrir varios modulos a la vez sin necesidad de abrir dialogos adicionales sobre las ventanas, creo que es una de las ideas del MDI, seguire revisando y esperando nuevas sugerencias e ideas, gracias, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 205
Joined: Fri Oct 07, 2005 05:07 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 09:28 PM
Tienes que volver a evaluar el when... com oFldx:aDialogs[ 2 ]:aEvalwhen()

Por ejemplo
Code (fw): Select all Collapse
聽 聽 聽 DEFINE BUTTON aBtnBar[1] OF oBar NOBORDER GROUP ;
聽 聽 聽 聽 聽RESOURCE "NUEVO32" ;
聽 聽 聽 聽 聽Tooltip "Crear Registro" ;
聽 聽 聽 聽 聽ACTION ( lNew := .t., oFldx:aDialogs[ 2 ]:aEvalwhen(), oFldx:SetOption(2), oFldx:aDialogs[2]:SetFocus(), cargadata( oQry, aVar, aGet ), oFldx:UpDate() )
* 聽 聽 聽 聽 ACTION ( lNew := .t., oFldx:SetOption(2), oFldx:Refresh(), cargadata( oQry ) )

聽 聽 聽 DEFINE BUTTON aBtnBar[2] OF oBar NOBORDER ;
聽 聽 聽 聽 聽RESOURCE "MODIFI32" ;
聽 聽 聽 聽 聽Tooltip "Modificar Registro" ;
聽 聽 聽 聽 聽ACTION ( lNew := .f., [oFldx:aDialogs[ 2 ]:aEvalwhen(), oFldx:SetOption(2), oFldx:aDialogs[2]:SetFocus(), cargadata( oQry, aVar, aGet ), oFldx:UpDate() ) ;
聽 聽 聽 聽 聽WHEN ( oQry:RecCount() > 0 )
* 聽 聽 聽 聽 ACTION ( lNew := .f., oFldx:SetOption(2), oFldx:Refresh(), cargadata( oQry ) ) ;
Saludos/regards

RenOmaS



skype: americo.balboa
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER
Posted: Mon Mar 11, 2013 10:05 PM

Armando,

Si el problema es el WHEN, prueba asi:

oFldx:aDialogs[ 2 ]:AEvalWhen(), oFldx:aDialogs[ 2 ]:SetFocus()

regards, saludos

Antonio Linares
www.fivetechsoft.com