Amigos:
En un dialogo de carga de articulos a facturar, con cantidad, precio unitario, etc, necesito cambiar el picture del precio unitario de 2 o 4 digitos para los decimales segun el rubro que tenga el articulo que se esta facturando (si es combustible necesito 4 digitos, sino 2).
Esto no funciona:
OT:cPicture:=IF(cRub==1,"999,999.9999","999,999.99")
Por supuesto en la funcion donde se valida el articulo se actualiza esa variable pero no el picture del get, por mas :refresh(), :settext() o lo que sea que se haga con el.
Necesito algun metodo que "redefina" el get para que se entere que cambio el picture.
Saludos,
Cambiar picture de un get despues de activar un dialogo
-
- Posts: 108
- Joined: Sun Oct 09, 2005 6:12 pm
- Location: Mar del Plata - Argentina
- Contact:
Este es un trozo de código de uno de mis programas:
cPic1 := IF(nEuro=1,"@E 9,999.99","@E 999,999")
cPic2 := IF(nEuro=1,"@E 9999.99" ,"@E 999999" )
DEFINE DIALOG oDLct RESOURCE "CUOTAS2" OF oDlg PIXEL FONT oFnt
REDEFINE GET aGet[1] VAR oGet1 ID 134 OF oDLct ;
WHEN { || aGet[1]:oGet:Picture:=cPic2 , .T. } ;
VALID { || aGet[1]:oGet:Picture:=cPic1 , .T. }
...
y me funciona perfectamente.
Fijate que en _, la cantidad de nueves es la misma, quizá esté ahí tu problema. Por si acaso, inicializa las variables con 'o.oo' en lugar de con '0', hay veces que da problemas con los decimales si no se han inicializado adecuadamente.
cPic1 := IF(nEuro=1,"@E 9,999.99","@E 999,999")
cPic2 := IF(nEuro=1,"@E 9999.99" ,"@E 999999" )
DEFINE DIALOG oDLct RESOURCE "CUOTAS2" OF oDlg PIXEL FONT oFnt
REDEFINE GET aGet[1] VAR oGet1 ID 134 OF oDLct ;
WHEN { || aGet[1]:oGet:Picture:=cPic2 , .T. } ;
VALID { || aGet[1]:oGet:Picture:=cPic1 , .T. }
...
y me funciona perfectamente.
Fijate que en _, la cantidad de nueves es la misma, quizá esté ahí tu problema. Por si acaso, inicializa las variables con 'o.oo' en lugar de con '0', hay veces que da problemas con los decimales si no se han inicializado adecuadamente.
Nos Gusta Programar
Si lo que necesitas es definirlos después que el Dialogo, entonces a lo mejor tendrás que hacerlo dentro de una funcion de inicalización
ACTIVATE DIALOG oDlg ON INIT MiFuncionDeIni(oGet)
...
function MiFuncionDeIni(oGet)
oGet:oGet:Pìcture := .....
RETURN NIL
Aunque en teoría no es necesario.
Por cierto, te has dado cuenta que es oGet:oGet:Picture Y NO oGet:cPicture !!! reminicencias de la clase GET de CLIPPER.
ACTIVATE DIALOG oDlg ON INIT MiFuncionDeIni(oGet)
...
function MiFuncionDeIni(oGet)
oGet:oGet:Pìcture := .....
RETURN NIL
Aunque en teoría no es necesario.
Por cierto, te has dado cuenta que es oGet:oGet:Picture Y NO oGet:cPicture !!! reminicencias de la clase GET de CLIPPER.
Nos Gusta Programar
-
- Posts: 108
- Joined: Sun Oct 09, 2005 6:12 pm
- Location: Mar del Plata - Argentina
- Contact:
Manuranos:
Muchas gracias, me solucionastes el problema. Quedo:
IF CRUB==1
OT:CPICTURE:='999,999.9999'
oPuni:oGet:Picture:=OT:CPICTURE
oPuni:Refresh()
ELSE
OT:CPICTURE:='999,999.99'
oPuni:oGet:Picture:=OT:CPICTURE
oPuni:Refresh()
ENDIF
Y funciona perfecto.
Saludos,
Ahi estaba la clave, tantos años programando en fw y recien me entero. Usaba :oGet:picture, oGet:cPicture,oGet:cPict y todo daba error, y eso que mire los fuentes en tget.prg.te has dado cuenta que es oGet:oGet:Picture Y NO oGet:cPicture !!!
Muchas gracias, me solucionastes el problema. Quedo:
IF CRUB==1
OT:CPICTURE:='999,999.9999'
oPuni:oGet:Picture:=OT:CPICTURE
oPuni:Refresh()
ELSE
OT:CPICTURE:='999,999.99'
oPuni:oGet:Picture:=OT:CPICTURE
oPuni:Refresh()
ENDIF
Y funciona perfecto.
Saludos,