Page 1 of 1

SOLUCIONADO, (SAY .. PICTURE error en decimales)

Posted: Mon Sep 07, 2020 5:34 am
by albeiroval
Hola,

Necesito que un control SAY muestre el valor numerico que contiene el control GET,
logre hacerlo solamente con la parte entera, pero con los decimales no lo hace.

Code: Select all


#define TO_PICTURE := "@E 999,999,999,999.99" 

static lfirst := .T.

...

@ 1.6, 4 GET oGet VAR uTemp SIZE 120, 12 OF oDlg 
@ 3.6, 4 SAY oSay PROMPT "" SIZE 120, 12 OF oDlg PICTURE TO_PICTURE 

ACTIVATE DIALOG oDlg; 
     CENTERED;
     ON INIT OnInitMsgGetEx( oGet, oDlg, oSay )

static Function OnInitMsgGetEx( oGet, oDlg, oSay )
    
     oGet:cPicture = TO_PICTURE 
     oGet:bKeyChar = <|k,f,o| 
                      Local cBuffer := ""
                   
                        if lfirst
                           lfirst := .F.
                             SetWindowText( oSay:hWnd, "")                      
                             Return Nil
                        endif
                             
                      cbuffer := strtran(o:oGet:buffer, ",", "")
                      cbuffer := AllTrim(cbuffer) 
                      cbuffer := cbuffer + Chr(k)
                      cbuffer := Val(cbuffer) 
                      SetWindowText( oSay:hWnd, Transform( cbuffer, TO_PICTURE) )
                                            
                      Return Nil
                    >
               
Return Nil                 


 
[img]
https://i.postimg.cc/SxpRCzhC/get.png
[/img]

Saludos

Re: SAY .. PICTURE error en decimales

Posted: Mon Sep 07, 2020 12:40 pm
by karinha
Este código no compila... Haga un ejemplo completo.

Saludos.

Re: SAY .. PICTURE error en decimales

Posted: Mon Sep 07, 2020 1:08 pm
by albeiroval
Hola karinha,

Aqui el ejemplo completo.

Code: Select all

#include "fivewin.ch"

#define TO_PICTURE "@E 999,999,999,999.99"

static lfirst := .T.

function main()

    local oDlg, oGet, oBmp, oFont
  local oSay
  local oBtn  := Array(2)
  local uTemp := 0
  local lOk   := .f.
   
    DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12 BOLD

  DEFINE DIALOG oDlg FROM 10, 20 TO 20, 59.5 TITLE "TEST" FONT oFont

    @ 1.6, 4 GET oGet VAR uTemp SIZE 120, 12 OF oDlg
    @ 2.3, 4 SAY oSay PROMPT "" SIZE 120, 12 OF oDlg PICTURE TO_PICTURE
    
    @ 2.90, 7.5 - If( oBmp == Nil, 2, 0 ) BUTTON oBtn[1] PROMPT "&Aceptar"  OF oDlg SIZE 35, 12 ;
    ACTION ( oDlg:End(), lOk := .t. ) DEFAULT

  @ 2.90, 16.5 - If( oBmp == Nil, 2, 0 ) BUTTON oBtn[2] PROMPT "&Salir" OF oDlg SIZE 35, 12 ;
    ACTION ( oDlg:End(), lOk := .f. )
      

    ACTIVATE DIALOG oDlg;
     CENTERED;
     ON INIT OnInitMsgGetEx( oGet, oDlg, oSay )
     
Return Nil     

static Function OnInitMsgGetEx( oGet, oDlg, oSay )
   
    oGet:cPicture = TO_PICTURE
  oGet:bKeyChar = <|k,f,o|
                                    Local cBuffer := ""
                   
                    if lfirst
                         lfirst := .F.
                       SetWindowText( oSay:hWnd, "")                      
                       Return Nil
                    endif
                             
                    cbuffer := strtran(o:oGet:buffer, ",", "")
                    cbuffer := AllTrim(cbuffer)
                    cbuffer := cbuffer + Chr(k)
                    cbuffer := Val(cbuffer)
                    SetWindowText( oSay:hWnd, Transform( cbuffer, TO_PICTURE) )
                                           
                    Return Nil
                   >
              
Return Nil                

// FINAL

 
 

Re: SAY .. PICTURE error en decimales

Posted: Mon Sep 07, 2020 4:57 pm
by JESUS MARIN
Saludos

a mi, me da muchos errores.

voy a revisarlo

Re: SAY .. PICTURE error en decimales

Posted: Mon Sep 07, 2020 5:10 pm
by karinha

Code: Select all

// SAMPLES\ALBEROVA.PRG - Nunca me complico con Fivewin.

#Include "FiveWin.ch"

#Define TO_PICTURE "@E 999,999,999,999.99"

STATIC lfirst := .T.

FUNCTION Main()

   LOCAL oDlg, oGet, oBmp, oFont, oSay
   LOCAL oBtn  := Array( 2 )
   LOCAL uTemp := 0
   LOCAL lOk   := .F.

   SET DECIMALS TO 2
   
   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, - 12 BOLD

   DEFINE DIALOG oDlg FROM 10, 20 TO 20, 59.5 TITLE "TEST" FONT oFont

   oDlg:lHelpIcon := .F.

   @ 1.6, 4 GET oGet VAR uTemp SIZE 120, 12 OF oDlg UPDATE ;
      ON CHANGE Cambia_Say_Tiempo_Real( oGet, oDlg, oSay )

   @ 2.3, 4 SAY oSay PROMPT "" SIZE 120, 12 OF oDlg UPDATE
   
   @ 2.90, 7.5 - If( oBmp == NIL, 2, 0 ) BUTTON oBtn[1] PROMPT "&Aceptar"  ;
      OF oDlg SIZE 35, 12 ACTION ( oDlg:End(), lOk := .T. ) DEFAULT

   @ 2.90, 16.5 - If( oBmp == NIL, 2, 0 ) BUTTON oBtn[2] PROMPT "&Salir"   ;
      OF oDlg SIZE 35, 12 ACTION ( oDlg:End(), lOk := .F. ) CANCEL
     
   ACTIVATE DIALOG oDlg CENTERED
     
RETURN NIL

FUNCTION Cambia_Say_Tiempo_Real( oGet, oDlg, oSay )

   LOCAL cVar, nCampo
   LOCAL cPicture := TO_PICTURE

   oGet:cPicture     := TO_PICTURE
   oGet:oGet:Picture := TO_PICTURE

   cVar   := oGet:GetText()
   nCampo := ALLTRIM( cVar )

   TRANSF( nCampo, cPicture )

   oSay:VARPUT( nCampo )
   oSay:Refresh()

RETURN( .T. )

// FINAL - kapiabafwh@gmail.com
 
Regards, saludos.

Re: SAY .. PICTURE error en decimales

Posted: Mon Sep 07, 2020 5:40 pm
by JESUS MARIN
Prueba este, super simple.

Code: Select all


#include "fivewin.ch"

#define TO_PICTURE "@E 999,999,999,999.99"


function main()

  local oDlg, oGet, uTemp:=0.00, oFont, oSay, cSay:="", oBtn

  DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12

  DEFINE DIALOG oDlg FROM 10, 20 TO 20, 59.5 TITLE "TEST" FONT oFont

    @ 1.6, 4 GET oGet VAR uTemp SIZE 120, 12 OF oDlg

    @ 2.3, 4 SAY oSay VAR cSay  SIZE 120, 12 OF oDlg UPDATE

    @ 3,2  BUTTON oBtn PROMPT "&Aceptar"  OF oDlg SIZE 35, 12 ACTION oDlg:End()


    oGet:bChange:={ || oSay:SetText(Transform( uTemp, TO_PICTURE)) }

    ACTIVATE DIALOG oDlg

Return Nil
 

Re: SAY .. PICTURE error en decimales

Posted: Mon Sep 07, 2020 7:26 pm
by albeiroval
Chicos gracias por responder,
Ninguno de los 2 ejemplos funciona.

Jesus, probe tu ejemplo y no hace lo que necesito. La idea es la siguiente:
cuando se este tecleando el numero en el GET en el mismo momento(en linea)
muestre el resultado en el campo SAY.

Karinha, raro que no compile el ejemplo que te envie. En cuanto al ejemplo
que pusiste NO funciona con los decimales y en el GET los
millares los separa con espacio (no deberia verse asi), y cuando usas la tecla backspace (retroceso)
el buffer del GET no trabaja bien.

Gracias a ambos.

Re: SAY .. PICTURE error en decimales

Posted: Tue Sep 08, 2020 12:27 am
by karinha
Cual versión del five? Reporte para mister Cristóbal, porfa.

Saludos.

Re: SAY .. PICTURE error en decimales

Posted: Tue Sep 08, 2020 12:47 am
by albeiroval
fwh 12.19

Re: SAY .. PICTURE error en decimales

Posted: Tue Sep 08, 2020 1:02 am
by nageswaragunupudi
albeiroval wrote:fwh 12.19
There is no version FWH1219.

Do you mean December 2019?

That is FWH1912 ?

Re: SAY .. PICTURE error en decimales

Posted: Tue Sep 08, 2020 1:58 am
by albeiroval
That is FWH1912 ?
sorry for my mistake, the version is fwh19.12

Re: SAY .. PICTURE error en decimales

Posted: Tue Sep 08, 2020 2:25 am
by nageswaragunupudi
Is this what you want?
Image

This is the sample code with FWH1912:

Code: Select all

#include "fivewin.ch"

function Main()

   local oDlg, oFont, oGet, oSay, cVal, nVal := 0.0
   local nSay  := nVal
   local cPic  := "@E 999,999,999,999.99"

   SetGetColorFocus()

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-20
   DEFINE DIALOG oDlg SIZE 300,200 PIXEL FONT oFont TITLE FWVERSION

   @ 10,10 GET oGet VAR nVal PICTURE cPic SIZE 100,16 PIXEL OF oDlg RIGHT ;
      VALID ( nSay := nVal, oDlg:Update(), .t. )

   oGet:bChange := <|k|
      if oGet:oGet:buffer != nil
         nSay  := Val( StrTran( oGet:oGet:buffer, ",", "." ) )
         oDlg:Update()
      endif
      return .t.
      >

   @ 30,10 SAY oSay PROMPT { || nSay } PICTURE cPic SIZE 98,14 PIXEL OF oDlg RIGHT UPDATE

   @ 60,10 BUTTON "OK" SIZE 40,20 PIXEL OF oDlg

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil
 

Re: SAY .. PICTURE error en decimales

Posted: Tue Sep 08, 2020 2:39 am
by albeiroval
Thank you very much Mr. RAO, it works perfectly

Muchas gracias Mr. RAO, funciona perfectamente

:D