WHEN MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER-SOLUCIONADO

WHEN MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER-SOLUCIONADO

Postby joseluisysturiz » Sun Mar 10, 2013 3: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...

Image

Uploaded with ImageShack.us

Image

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
Last edited by joseluisysturiz on Tue Mar 12, 2013 2:26 am, edited 2 times in total.
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby Armando » Sun Mar 10, 2013 4:13 pm

José Luis:

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

Code: Select all  Expand view

    oFld:SetOption(2)
    oFld:nOption := 2
 


Y después, en la función Pestaña2() asignas el foco al get.

Code: Select all  Expand view

    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
User avatar
Armando
 
Posts: 3084
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby joseluisysturiz » Sun Mar 10, 2013 7: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: Select all  Expand view
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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby Armando » Mon Mar 11, 2013 1:07 am

José Luis:

Solo por probar, cambia la función cargadata( oQry ) después de oFldx:nOption := 2
Code: Select all  Expand view

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
User avatar
Armando
 
Posts: 3084
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby joseluisysturiz » Mon Mar 11, 2013 2:38 am

Armando wrote:José Luis:

Solo por probar, cambia la función cargadata( oQry ) después de oFldx:nOption := 2
Code: Select all  Expand view

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... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby Antonio Linares » Mon Mar 11, 2013 7:32 am

Jose Luis,

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41404
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby joseluisysturiz » Mon Mar 11, 2013 4: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... :shock:

BOTONES
Code: Select all  Expand view
     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: Select all  Expand view
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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby Armando » Mon Mar 11, 2013 4:22 pm

José Luis:

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

Code: Select all  Expand view

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
User avatar
Armando
 
Posts: 3084
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby joseluisysturiz » Mon Mar 11, 2013 5: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... :shock:

Code: Select all  Expand view
#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: Select all  Expand view
// 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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby Armando » Mon Mar 11, 2013 5:25 pm

José Luis:

Una más.

Code: Select all  Expand view

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
User avatar
Armando
 
Posts: 3084
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby joseluisysturiz » Mon Mar 11, 2013 5: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... :shock:

Code: Select all  Expand view
     
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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby hmpaquito » Mon Mar 11, 2013 7: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: Select all  Expand view

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
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby joseluisysturiz » Mon Mar 11, 2013 8: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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby RenOmaS » Mon Mar 11, 2013 9:28 pm

Tienes que volver a evaluar el when... com oFldx:aDialogs[ 2 ]:aEvalwhen()

Por ejemplo
Code: Select all  Expand view

      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
User avatar
RenOmaS
 
Posts: 205
Joined: Fri Oct 07, 2005 5:07 pm

Re: VALIDACIONES CON WND MDICHILD/BUTTONBAR/DLG NOMODAL/FOLDER

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41404
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 49 guests