En _ de modificacion de las clases, como deberia de hacer para no incumplir con el reglamento?
Fundamento:
Hoy por hoy la clase no informa si el control tubo modificaciones, lo que hace es ejecutar un bloque de codigo cuando se hizo una modificacion, me refiero al bChange...
Pero la mayoria de las veces en mi trabajo a parte del bChange... utilizamos el bValid... en donde chequeamos si el control get ha cambiado su contenido para asi definir que hacemos al respecto...
Un ejemplo:
Code: Select all
function main()
local aCambio:= { .F., .F., .F., .F. }
local oDatos:= array(4), ;
vDatos:= array(4), ;
oDlg
vDatos[1]:= space(20)
vDatos[2]:= space(20)
vDatos[3]:= space(20)
vDatos[4]:= space(20)
define dialog oDlg resource "DLG_DIALOGO"
redefine get oDatos[1] var vDatos[1] id 100 of oDlg
redefine get oDatos[2] var vDatos[2] id 101 of oDlg
redefine get oDatos[3] var vDatos[3] id 102 of oDlg
redefine get oDatos[4] var vDatos[4] id 103 of oDlg
// Actualmente hacemos asi:
oDatos[1]:bChanged:= { || aCambio[1]:= .t. }
oDatos[2]:bChanged:= { || aCambio[2]:= .t. }
oDatos[3]:bChanged:= { || aCambio[3]:= .t. }
oDatos[41:bChanged:= { || aCambio[4]:= .t. }
// Validamos ahora
oDatos[1]:bValid:= { || ValidarDatos( oDatos ) }
oDatos[2]:bValid:= { || ValidarDatos( oDatos ) }
oDatos[3]:bValid:= { || ValidarDatos( oDatos ) }
oDatos[4]:bValid:= { || ValidarDatos( oDatos ) }
ACTIVATE DIALOG oDlg
return ( nil )
//---------------------------------------------------------
static function ValidarDatos( oDatos )
if aCambio[1] .or. aCambio[2] .or. aCambio[3] .or. aCambio[4]
// Aca se hace lo que uno quiere...
endif
return ( nil )
Y agregue dos lineas de codigo a la Tget
1) dentro de la definicion de la clase
Code: Select all
CLASS TGet FROM TControl
...
DATA lCambio INIT .F.
Code: Select all
METHOD GotFocus( hCtlLost ) CLASS TGet
// Esta linea no me habia dado cuenta, gracias wmormar
::lCambio := .f. // wmormar [20070322]
Code: Select all
METHOD LostFocus( hCtlFocus ) CLASS TGet
...
if ! ::oGet:BadDate .and. ! ::lReadOnly .and. ;
( ::oGet:changed .or. ::oGet:unTransform() <> ::oGet:original )
::oGet:Assign() // for adjust numbers
::oGet:UpdateBuffer()
::lCambio:= .T. // GoosFancito
....
ENDIF
Code: Select all
function main()
local oDatos:= array(4), ;
vDatos:= array(4), ;
oDlg
vDatos[1]:= space(20)
vDatos[2]:= space(20)
vDatos[3]:= space(20)
vDatos[4]:= space(20)
define dialog oDlg resource "DLG_DIALOGO"
redefine get oDatos[1] var vDatos[1] id 100 of oDlg
redefine get oDatos[2] var vDatos[2] id 101 of oDlg
redefine get oDatos[3] var vDatos[3] id 102 of oDlg
redefine get oDatos[4] var vDatos[4] id 103 of oDlg
// Validamos ahora
oDatos[1]:bValid:= { || ValidarDatos( oDatos ) }
oDatos[2]:bValid:= { || ValidarDatos( oDatos ) }
oDatos[3]:bValid:= { || ValidarDatos( oDatos ) }
oDatos[4]:bValid:= { || ValidarDatos( oDatos ) }
ACTIVATE DIALOG oDlg
return ( nil )
//---------------------------------------------------------
static function ValidarDatos( oDatos )
if oDatos[1]:lCambio .or. oDatos[2]:lCambio .or. oDatos[3]:lCambio .or. oDatos[4]:lCambio
// Aca se hace lo que uno quiere...
endif
return ( nil )
Espero que les sirva.[quote][/quote]