FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como controlar que no se salten los Gets con el Mouse
Posts: 467
Joined: Fri Dec 09, 2005 12:41 AM
Re: Como controlar que no se salten los Gets con el Mouse
Posted: Tue Sep 08, 2015 05:18 PM

Estimado Rolando.
Nuestros conocimientos y experiencia son lo mejor que tenemos, ! , Nunca sera una polemica, es un regalo que damos todos.

Por ello este Foro es tan especial !

Gracias
Lubin

Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Como controlar que no se salten los Gets con el Mouse
Posted: Tue Sep 08, 2015 05:44 PM
ACC69 wrote:
Marcelo Via Giglio wrote:Estimado Rolando,

que gusto saber de ti, como andas espero alg煤n d铆a podamos tomar un cafe.

Sobre el tema de validaci贸n, como dice Rolando es menos dolor de cabeza hacerlo en bloque, pero puedes validar alg煤n tipo de dato como por ejemplo un c贸digo para no introducir uno repetido, y colocas la clausa CANCEL en el BUTTON (de cancelar o salir) o si no esta disponible utilizar oBtn:lCancel := .T. eso te permite no trancarte en una validacion de un GET.

Yo utilizo un validador basico

Code (fw): Select all Collapse
//------------------------------------------------------------------------------
FUNCTION validador ( oDbf, aParam )
// 聽aParam { bloque de verificaci贸n, Campo de la tabla, mensaje }
//------------------------------------------------------------------------------
聽 聽LOCAL i

聽 聽FOR i := 1 TO LEN( aParam )
聽 聽 聽 IF VALTYPE( aParam[i,1] ) = "B"
聽 聽 聽 聽 聽IF ! EVAL( aParam[i,1], oDbf )
聽 聽 聽 聽 聽 聽 RETURN .F.
聽 聽 聽 聽 聽ENDIF
聽 聽 聽 ELSE
聽 聽 聽 聽 IF EVAL( aParam[i,2], oDbf:fieldGet( oDbf:FIELDPOS( aParam[i,1] ) ), oDbf:RECNO(), oDbf )
聽 聽 聽 聽 聽 聽MSGALERT( aParam[i,3] )
聽 聽 聽 聽 聽 聽RETURN .F.
聽 聽 聽 聽 ENDIF
聽 聽 聽 ENDIF
聽 聽NEXT

聽 聽RETURN .T.


y lo defines

Code (fw): Select all Collapse
::aValids := {{ "almacen", 聽 聽 {|c| EMPTY(c) }, "Se debe definir un almacen" 聽 聽 聽 聽},;
聽 聽 聽 聽 聽 聽 聽 聽 聽{ "item", 聽 聽 聽 聽{|c| EMPTY(c) }, "Se debe definir un c贸digo de item" },;
聽 聽 聽 聽 聽 聽 聽 聽 聽{ IF( job $ "NEW,DUPLI", {| oDbf | valid_item( oDbf ) }, {|| .T. } ) 聽},;
聽 聽 聽 聽 聽 聽 聽 聽 聽{ "descripcion", {|c| EMPTY(c) }, "Se debe definir una descripci贸n" 聽 },;
聽 聽 聽 聽 聽 聽 聽 聽 聽{ "aplicacion", 聽{|c| EMPTY(c) }, "Se debe definir la aplicaci贸n" 聽 聽 };
聽 聽 聽 聽 聽 聽 聽 聽 聽}


y lo llamas antes de cualquier operaci贸n, funciona en base a la clase tDataBase para los campos de validaci贸n

Code (fw): Select all Collapse
validador( ::oDbf, ::aValids )


Son solo ideas pero espero ayuden

Saludos

Marcelo



Hola buenos dias de antemano les envio cordial saludos.

Aqui pongo mi forma de validar mis gets antes de grabar el registro,segun sea la condicion ...

Code (fw): Select all Collapse
REDEFINE GET oG_IVA[03] VAR nIVA_1 聽 ID 103 OF oDlgIVA PICT "99,999,999.99" VALID V_IVA(1)

//------------------------------------------------------------------------------
STATIC FUNCTION V_IVA(nOp) 聽// Function para validar el get
聽//Esta parte de aqui te permite regresar al get anterior en caso que tecleaste mal el dato\\
聽IF !GetKeyState( VK_RETURN ) .and. !GetKeyState( VK_DOWN ) .and. !GetKeyState( VK_TAB )
聽 聽 聽RETURN( .T. )
聽ENDIF

聽DO CASE
聽 聽 CASE noP = 1 .AND. nIVA_1 <> 0 .AND. !nImpBs1 <> 0 .AND. !nTasa1 <> 0
聽 聽 聽 聽 聽 MsgAlert('Error: No puede capturar importe IVA,si base y tasa IVA,se encuentra vac铆o',"Confirma")

聽 聽 聽 聽 聽 RETURN .F.
聽 聽 CASE noP = 2 .AND. nIVA_2 <> 0 .AND. !nImpBs2 <> 0 .AND. !nTasa2 <> 0
聽 聽 聽 聽 聽 MsgAlert('Error: No puede capturar importe IVA,si base y tasa IVA,se encuentra vac铆o',"Confirma")

聽 聽 聽 聽 聽 RETURN .F.
聽ENDCASE
RETURN (.T.)


//------------------------------------------------------------------------------
STATIC FUNCTION Reg_Cap()
聽Local nNumMov,cCtaSN

聽oG_D[06]:SetColor()
聽oG_D[06]:Refresh()
聽oG_D[07]:SetColor()
聽oG_D[07]:Refresh()

聽cCtaSN := SUBS(cCta,1,4) + SUBS(cCta,6,4) + SUBS(cCta,11,4) + SUBS(cCta,16,4)
聽cCta2 聽:= FORMATO1("cCta",cCta, .F.) // No Permite separar guiones


//Aqui antes de registrar el dato al dbf...te valida cada campo si esta vacio o no...\\
// Aqui te valida cada get despues del boton de agregar nuevo registro...yo creo que es lo mas fiable y seguro...
聽DO CASE
聽 聽 CASE !(S09)->( DbSeek(STR(nSegNg,4)) ) .AND. lAP_SN
聽 聽 聽 聽 聽 聽MsgInfo("Error: No existe Segmento de Negocio","Confirme")

聽 聽 聽 聽 聽 聽oG_D[02]:SetFocus()
聽 聽 聽 聽 聽 聽oG_D[02]:Refresh()

聽 聽 聽 聽 聽 聽RETURN.F.
聽 聽 CASE EMPTY(cCta)
聽 聽 聽 聽 聽 MsgInfo("Error: Favor de teclear subcuenta")

聽 聽 聽 聽 聽 oG_D[01]:SetFocus()
聽 聽 聽 聽 聽 oG_D[01]:Refresh()

聽 聽 聽 聽 聽 RETURN .F.
聽 聽 CASE (S08)->( DbSeek(cCta2) )
聽 聽 聽 聽 聽 IF (S08)->TIPONAT = "A"
聽 聽 聽 聽 聽 聽 聽 MsgInfo("Error: La cuenta debe ser de detalle!","Confirme")

聽 聽 聽 聽 聽 聽 聽 cCta := SPACE(19)

聽 聽 聽 聽 聽 聽 聽 oG_D[01]:SetFocus()
聽 聽 聽 聽 聽 聽 聽 oG_D[01]:Refresh()

聽 聽 聽 聽 聽 聽 聽 RETURN .F.
聽 聽 聽 聽 聽 ENDIF
聽 聽 CASE !(S08)->( DbSeek(cCta2) )
聽 聽 聽 聽 聽 聽MsgInfo("Error: La cuenta no existe!","Confirme")

聽 聽 聽 聽 聽 聽cCta := SPACE(19)

聽 聽 聽 聽 聽 聽oG_D[01]:SetFocus()
聽 聽 聽 聽 聽 聽oG_D[01]:Refresh()

聽 聽 聽 聽 聽 聽RETURN .F.
聽ENDCASE

聽// Aqui se a帽ade nuevo registro en caso que todos los gets hayan cumplido la validacion ...\\

聽//* Paso 1 ----- Agrega datos a S12:= Abre_Dbf(12,12) // Abre: POLZxMxA.DBF -----*\\
聽IF lAdd // Agrega nuevo registro
聽 聽 聽(S12)->( DbSeek(cID_AMMov+cTipo+STR(nNumPol,5)) )

聽 聽 聽IF (S12)->(!FOUND()) 聽// Si agrega nuevo resistro en la base de datos
聽 聽 聽 聽 聽(S12)->(DbAppend())

聽 聽 聽 聽 聽(S12)->FECALTA := DATE()
聽 聽 聽 聽 聽(S12)->REGHORA := AMPM(TIME())
聽 聽 聽 聽 聽(S12)->NICKUSUA:= cNombUsua
聽 聽 聽 聽 聽(S12)->NOMBUSUA:= cNombre
聽 聽 聽ENDIF

聽 聽 聽*?"Regisro nuevo dado de alta"
聽 聽 聽IF nCarg <> 0
聽 聽 聽 聽 聽aSum[1, 2] += nCarg
聽 聽 聽 聽 聽aSum[1, 3] += nAbon
聽 聽 聽 聽 聽aSum[1, 4] += nImpBs1
聽 聽 聽ENDIF

聽 聽 聽...Mas intrucciones
Return nil..


Y creo que es la forma correcta ,que muchas veces no siempre se podra validar en cada get, porque el usuario siempre tendra acceso usando el mouse..es mejor validar al darle click de grabar y ahi que se haga toda la validacion correcta y segura...

Saludos cordiales .

Atte: Adrian C. C.



Hola de nuevo Ing. Lubin, significa que ya solucionaste el problema de la validacion..???

Saludos.

Atte: Adrian C. C.
Posts: 85
Joined: Thu Oct 14, 2010 03:26 AM
Re: Como controlar que no se salten los Gets con el Mouse
Posted: Wed Sep 09, 2015 01:40 AM

RSalazarU:

Respecto a tu comentario:
NO colocar VALIDADORES en los Gets y ningun otro control de captura de datos.
Cuando colocas un validador a un GET, NO puedes salir de el mientras no se cumpla la
condicion,
lo cual te impide presionar en el boton CANCEL o CLOSE del dialogo, la unica forma de salir del
dialogo es presionando la tecla ESC.
A veces se da el caso, de que tienes que anular la tecla ESC; si de da el caso no podras cerrar
el DIALOGO a menos que se cumpla la condicion.
Esto me ocurrio, sobre todo, cuando hacia: VALID !Empty(cDato)

Toma 茅sta apreciaci贸n:

  1. En un formato con cualesquier campos de llenado, las opciones proporcionadas
    por Windows a trav茅z de FWH y Xharbour son muy ricas en opciones y nos permiten
    el pasearnos por todo el dialogo GET como queramos.
  2. El entrampamiento VALID si te permite salir si lo programas para todos los actos del
    usuario, por ejemplo

    • Tienes un campo GET que te pide un c贸digo de tabla.
    • Tu VALID podr铆a considerar hasta cuatro opciones
      FUNCTION ValidaGETdeTabla()
      LOCAL uvf:=.F.
      IF GETKEYSTATE(VK_UP) // al pulsar tecla flecha arriba
      uvf=.T. //te permite salir del GET para regresar al campo GET anterior.
      ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_RETURN)
      uvf=.T. //si quieres pasar sin llenar, puedes hacerlo
      ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_F2)
      //despliegas la tabla para que el usuario elija su clasificacion y le retornas
      //los datos complementarios en los campos necesarios.
      Eligi贸 los datos de un registro en la tabla sin pulsar ESC ??
      uvf=.T.
      No eligi贸, la tabla esta vacia ??
      sigue uvf en .F.
      ENDI
      ELSEIF LEN(CampoGetConTabla)=6
      //usuario conoce el codigo de la tabla ... realizas la busqueda y le retornas
      //los datos complementarios en los campos necesarios.
      Encontr贸 los datos del codigo ingresado en un registro de la tabla ??
      uvf=.T.
      No eligi贸, la tabla esta vacia ??
      sigue uvf en .F.
      ENDI
      ENDI
      RETU uvf
  3. La pos validaci贸n en el boton ACEPTAR es obligada antes de grabar.

Para Lubin:
El desorden con el que el usuario registre una forma no tiene que ser un problema para
encasillarlo a pasar los gets uno por uno en orden riguroso. Puede que el usuario NO tenga
en determinado momento el dato para llenar el GET tres, pero pero en ese mismo momento
SI tiene los datos para llenar los GETS seis, ocho y once.

Saludos

Julio C茅sar G贸mez Cort茅z
Godryc Experiencias
Lima Per煤

Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Como controlar que no se salten los Gets con el Mouse
Posted: Wed Sep 09, 2015 05:11 PM
Maggiro wrote:RSalazarU:

Respecto a tu comentario:
NO colocar VALIDADORES en los Gets y ningun otro control de captura de datos.
Cuando colocas un validador a un GET, NO puedes salir de el mientras no se cumpla la
condicion,
lo cual te impide presionar en el boton CANCEL o CLOSE del dialogo, la unica forma de salir del
dialogo es presionando la tecla ESC.
A veces se da el caso, de que tienes que anular la tecla ESC; si de da el caso no podras cerrar
el DIALOGO a menos que se cumpla la condicion.
Esto me ocurrio, sobre todo, cuando hacia: VALID !Empty(cDato)

Toma 茅sta apreciaci贸n:

01. En un formato con cualesquier campos de llenado, las opciones proporcionadas
por Windows a trav茅z de FWH y Xharbour son muy ricas en opciones y nos permiten
el pasearnos por todo el dialogo GET como queramos.
02. El entrampamiento VALID si te permite salir si lo programas para todos los actos del
usuario, por ejemplo
- Tienes un campo GET que te pide un c贸digo de tabla.
- Tu VALID podr铆a considerar hasta cuatro opciones
FUNCTION ValidaGETdeTabla()
LOCAL uvf:=.F.
IF GETKEYSTATE(VK_UP) // al pulsar tecla flecha arriba
uvf=.T. //te permite salir del GET para regresar al campo GET anterior.
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_RETURN)
uvf=.T. //si quieres pasar sin llenar, puedes hacerlo
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_F2)
//despliegas la tabla para que el usuario elija su clasificacion y le retornas
//los datos complementarios en los campos necesarios.
Eligi贸 los datos de un registro en la tabla sin pulsar ESC ??
uvf=.T.
No eligi贸, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ELSEIF LEN(CampoGetConTabla)=6
//usuario conoce el codigo de la tabla ... realizas la busqueda y le retornas
//los datos complementarios en los campos necesarios.
Encontr贸 los datos del codigo ingresado en un registro de la tabla ??
uvf=.T.
No eligi贸, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ENDI
RETU uvf

03. La pos validaci贸n en el boton ACEPTAR es obligada antes de grabar.

Para Lubin:
El desorden con el que el usuario registre una forma no tiene que ser un problema para
encasillarlo a pasar los gets uno por uno en orden riguroso. Puede que el usuario NO tenga
en determinado momento el dato para llenar el GET tres, pero pero en ese mismo momento
SI tiene los datos para llenar los GETS seis, ocho y once.

Saludos


Julio C茅sar G贸mez Cort茅z
Godryc Experiencias
Lima Per煤



Exactamente asi es Ing. Maggiro, por eso puse el ejemplo como se valida al pulsar el boton agregar y dentro de ese boton se valida si cada get se valide.. y si en el get tienes forzado a validar no podras regresar al get anterior, es por eso del ejemplo que puse de como lo hago .

Code (fw): Select all Collapse
//Esta parte de aqui te permite regresar al get anterior en caso que tecleaste mal el dato\\
 IF !GetKeyState( VK_RETURN ) .and. !GetKeyState( VK_DOWN ) .and. !GetKeyState( VK_TAB )
     RETURN( .T. )
 ENDIF



Saludos cordiales Ing. Maggiro

Atte: Adrian C. C.
Posts: 85
Joined: Thu Oct 14, 2010 03:26 AM
Re: Como controlar que no se salten los Gets con el Mouse
Posted: Thu Sep 10, 2015 02:52 AM

Esa es la idea ACCE69, nosotros hacemos que el usuario posea una buena herramienta
de trabajo operativo-productivo, bien por ser previsivo !!

Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Como controlar que no se salten los Gets con el Mouse
Posted: Thu Sep 10, 2015 06:33 AM
Julio C茅sar,

Maggiro wrote:
NO colocar VALIDADORES en los Gets y ningun otro control de captura de datos.
Cuando colocas un validador a un GET, NO puedes salir de el mientras no se cumpla la
condicion,
lo cual te impide presionar en el boton CANCEL o CLOSE del dialogo, la unica forma de salir del
dialogo es presionando la tecla ESC.


Creo que en los botones se puede a帽adir la cl谩usula CANCEL que permite que se ejecuten con el get inv谩lido, como es el caso que mencionas. 驴Lo has probado?

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"
Posts: 85
Joined: Thu Oct 14, 2010 03:26 AM
Re: Como controlar que no se salten los Gets con el Mouse
Posted: Thu Sep 10, 2015 08:34 AM

Carlos Mora :

La referencia corresponde a lo descrito por nuestro amigo RSalazarU:
Podrias escribir un ejemplo de lo que indicas?
<< cl谩usula CANCEL que permite que se ejecute con el get inv谩lido >>

Saludos

Julio C茅sar G贸mez Cort茅z
Godryc Experiencias
Lima Per煤

Continue the discussion