Page 1 of 1

Ayuda con CLIPBOAR

Posted: Sun Sep 27, 2009 5:59 am
by JoseGS
Hola amigos:

Desearia saber como se puede hacer esto:

Tengo varios GET donde el usuario ingresa valores de monedas
Hice una calculadora de dinero (al ir ingresando la cantidad de monedas y billetes de cada denominacion, se va presentando el valor total de la suma). Esta calculadora la llamo mediante un boton colocado en el dialogo

La pregunta es:

Como puedo devolver el valor total de la suma de dinero al GET que tenia el ultimo foco.
Creo que podria hacer un copia al CLIPBOARD y luego PASTE en el campo pero no se hacer lo primero y lo segundo lo tendria que hacer el usuario, cosa que me gustaria que fuera automatica.

Gracias

Re: Ayuda con CLIPBOAR

Posted: Sun Sep 27, 2009 2:33 pm
by Armando
Guillermo:

Se me ocurre, a menos que haya algo más directo, que en el botón donde llamas a la calculadora lo pongas así:

ACTION nVariable := CALCULADORA()

Y en la función calculadora regreses el valor + - así

STATIC FUNCTION Calculadora()
LOCAL nTotal := 0.00
.....
.....
tu código donde recibes los valores
y lo sumas a la variable nTotal
.....
....
RETURN(nTotal)

Espero te funcione la idea.

Saludos

Re: Ayuda con CLIPBOAR

Posted: Sun Sep 27, 2009 6:06 pm
by JoseGS
Hola Armando:

Gracias por contestar, en efecto, lo que propones me devolveria el valor calculado pero como puedo saber cual era el ultimo GET con foco para ponerle el valor calculado en forma automatica...

Gracias

Saludos hasta Toluca desde Panama

Re: Ayuda con CLIPBOAR

Posted: Sun Sep 27, 2009 6:38 pm
by Armando
Guillermo:

Mucho ayudaría si muestras parte del código donde tienes el problema pues,
al menos a mi, no me queda muy claro, pero tratando de adivinar un poco.

Mandale el get a la función Calculadora()

ACTION nVariable := CALCULADORA(UltimoGet)

Saludos

Re: Ayuda con CLIPBOAR

Posted: Sun Sep 27, 2009 10:39 pm
by JoseGS
En realidad no se trata de un problema. Estoy tratando de hacer una mejora al programa tal como sigue:


Tengo la siguiente funcion que presenta un dialogo en pantalla en donde el usuario puede ingresar la cantidad de monedas y billetes que tiene a la mano para que la funcion SUMAPLATA le valla mostrando la suma total de dinero que tiene. Esta funcion MONEYCALC() la llamo desde un boton que se encuentra en el dialogo. En dicho dialogo existen varios GETs en donde el usuario puede ingresar valores de dinero, pero, actualmente el usuario tiene que copiar el valor mostrado por MONEYCALC() en una hoja de papel y luego al cerrar la ventana de MONEYCALC() escribir la cantidad de dinero en la celda que el desee.

Lo que quiero saber es si existe la posibilidad que al momento de llamar a la funcion MONEYCALC(), la misma pueda saber cual GET tenia foco en ese momento para que al finalizar, copie el valor de la suma en dicho GET sin que el usuario tenga que recordar el valor e ingresarlo por si mismo.


Gracias amigo


//-------------------------------
FUNC MONEYCALC()
LOCAL oDlg,X,oSAY,oBtn,nSAY:=0,oFOTO
LOCAL oGET:=ARRAY(14)
LOCAL aGET:={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
DEFINE DIALOG oDlg RESOURCE "MONEYCALC"
//REDEFINE IMAGE oFOTO ID 165 OF oDlg FILE '\MEDICKEY\IMG\CUENTA.JPG' //ADJUST
REDEFINE SAY oSAY VAR nSAY ID 1000 OF oDlg PICTURE "99,999.99" COLOR CLR_BLUE FONT oFontMAGOO
REDEFINE GET oGET[ 1] VAR aGET[ 1] ID 131 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 2] VAR aGET[ 2] ID 132 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 3] VAR aGET[ 3] ID 133 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 4] VAR aGET[ 4] ID 134 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 5] VAR aGET[ 5] ID 135 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 6] VAR aGET[ 6] ID 136 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 7] VAR aGET[ 7] ID 137 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 8] VAR aGET[ 8] ID 138 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[ 9] VAR aGET[ 9] ID 139 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[10] VAR aGET[10] ID 140 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[11] VAR aGET[11] ID 141 OF oDlg PICTURE "9999" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[12] VAR aGET[12] ID 142 OF oDlg PICTURE "99,999.99" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[13] VAR aGET[13] ID 143 OF oDlg PICTURE "99,999.99" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE GET oGET[14] VAR aGET[14] ID 144 OF oDlg PICTURE "99,999.99" VALID (nSAY:=SUMAPLATA(aGET),oSAY:REFRESH(),.T.)
REDEFINE BUTTON oBtn ID 100 OF oDlg ACTION oDlg:END()
ACTIVATE DIALOG oDlg CENTER
RETU[]
//-------------------------------
FUNC SUMAPLATA(aM)
LOCAL M:=(aM[1]*.01)+(aM[2]*.05)+(aM[3]*.1)+(aM[4]*.25)+(aM[5]*.5)
LOCAL B:=aM[6]+(aM[7]*5)+(aM[8]*10)+(aM[9]*20)+(aM[10]*50)+(aM[11]*100)
RETU M+B+aM[12]+aM[13]+aM[14]

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 1:50 am
by Armando
Guillermo:

Y cual es el código de la parte del diálogo donde mandas ejecutar la función MoneyCalc() y
a la que quieres retornar la suma de dinero ?

Saludos

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 3:45 am
by JoseGS
Hola

Desde aqui llamo a la funcion MoneyCalc()

REDEFINE SBUTTON oBtn ID 801 OF oFld3:aDialogs[1] RESOURCE "B_CALC" ACTION MONEYCALC() XP PROMPT "Calculadora de dinero" TEXT 4

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 6:10 am
by JavierVital
En el Get que estas leyendo ahi mandas a trae a la funcion de la calculadora

oGet[1,2] := 0
REDEFINE GET oGet[1,1] VAR oGet[1,2] ID 101 OF oDlg BITMAP "Calc" ACTION MoneyCalc(oGet[1,1])

En la funcion de la la Calculadora
FUNCTION MoneyCalc(oObj1)
LOCAL nTotal
..........
..........
..........
oObj1:cText(nTotal)
RETURN

Ami me funciona bien
Saludos.

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 12:47 pm
by JoseGS
Hola Javier

Que version de FWH utilizas ?.
La sintaxis de la instruccion que me indicas no corre en la mia...
En efecto, asi funcionaria, pero tendria que poner un boton de llamada a la calculadora en cada uno de los GETs de dinero que tiene el dialogo (son mas de 50)... Me gustaria que la propia funcion MONEYCALC() sepa cual era el ultimo GET con foco para no tener que programar tanto...


Gracias

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 2:00 pm
by Armando
Guillermo:

Creo que tu solución sería que usaras la clase BTNGET, mira un ejemplo de su uso

Code: Select all

#Include "BtnGet.ch"

REDEFINE BTNGET aGets[02] VAR nImporte ID 102 OF oDlg;
     RESOURCE "Buscar" UPDATE;
     PICTURE "@999,999.99";
     ACTION nImporte := MoneyCalc();
     MESSAGE "Código del cliente"
 
Observa el uso del método ACTION

La clase BtnGet es de terceros y si no mal recuerdo FW en sus versiones recientes ya viene con la clase GET con su propio ACTION.

Saludos

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 4:22 pm
by JoseGS
Gracias Armando.

He tratado de usar la clase BTNGET incluyendo BTNGET.CH y BTNGET.LIB pero al compilar me sale el error
Error: Unresolved external '_HB_FUN_TBTNGET'

Alguna idea

uso FWH 8.05

Gracias

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 5:08 pm
by Armando
Guillermo:

Todo hace suponer que no estas ligando la LIB BTNGET, asegurate que la tienes incluida. Admas debe ser creada con la misma versión de [x]Harbour que estas usando para compilar tu aplicación.

Saludos

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 9:49 pm
by JavierVital
Guillermo
Como dice Armando tu solucion es BTNGET

Funciona muy bien a mi tambien me a funcionado muy bien.

Saludos.

Re: Ayuda con CLIPBOAR

Posted: Mon Sep 28, 2009 10:43 pm
by JoseGS
Hola amigos.

He verificado y si se encuenta en la lista de las lib. El que este compilada con la version FWH 8.05 no lo se, solo utilizo la que ya estaba en \FWH\LIB

Gracias