Page 1 of 1

How to count input word in TGet?

Posted: Fri Dec 21, 2007 3:41 am
by richard-service
Hi

this function like Web site Send SMS input UI.

Redefine GET ... ON CHNAGE....

I need show how many space can input in GET Object.

The problem is ON CHANGE can't Refresh other Object of FWH.

Source code:
***********************************
nLEFT1:=LEN(PAY->RMK1)-LEN(TRIM(PAY->RMK1))
nLEFT2:=LEN(PAY->RMK2)-LEN(TRIM(PAY->RMK2))

REDEFINE GET PAY->RMK1 ID 21 OF oDlg ;
ON CHANGE LEFT_SHOW(1) ;
UPDATE

REDEFINE GET PAY->RMK2 ID 23 OF oDlg ;
ON CHANGE LEFT_SHOW(2) ;
UPDATE

REDEFINE SAY oLEFT1 PROMPT nLEFT1 PICTURE "99" ID 12 OF oDlg ;
UPDATE

REDEFINE SAY oLEFT2 PROMPT nLEFT2 PICTURE "99" ID 14 OF oDlg ;
UPDATE
....
************************
STATIC FUNCTION LEFT_SHOW(nLINE)

DO CASE
CASE nLINE=1
nLEFT1:=LEN(PAY->RMK1)-LEN(TRIM(PAY->RMK1))

oLEFT1:REFRESH() ==> NOT WORK

CASE nLINE=2
nLEFT2:=LEN(PAY->RMK2)-LEN(TRIM(PAY->RMK2))

oLEFT2:REFRESH() ==> NOT WORK

ENDCASE

RETURN NIL
**************************************

Posted: Fri Dec 21, 2007 9:56 am
by Antonio Linares
Richard,

>
nLEFT1:=LEN(PAY->RMK1)-LEN(TRIM(PAY->RMK1))
oLEFT1:REFRESH() ==> NOT WORK
>

oLeft1:SetText( Str( nLeft1 ) )

Posted: Fri Dec 21, 2007 1:27 pm
by richard-service
Antonio Linares wrote:Richard,

>
nLEFT1:=LEN(PAY->RMK1)-LEN(TRIM(PAY->RMK1))
oLEFT1:REFRESH() ==> NOT WORK
>

oLeft1:SetText( Str( nLeft1 ) )
Hi Antonio,

I try it but not work. TSay object not Refresh.
oLEFT1:REFRESH() not work.

Have you any idea for it?

Regards,

Richard

Posted: Mon Dec 24, 2007 3:57 am
by kokookao2007
Antonio :

nLEFT1:=LEN(PAY->RMK1)-LEN(TRIM(PAY->RMK1))
oLeft1:SetText( Str( nLeft1 ) )
oLeft1:REFRESH()
hi Antonio:

Get ...On Change => can't refresh other objects .

Same problem to me , look like a bug .

Best Regards
kokoo

Posted: Mon Dec 24, 2007 5:08 am
by nageswaragunupudi
Please try this code. You can use the same logic to achieve what you want.

Code: Select all

FUNCTION Main()

   LOCAL oDlg,oFont
   LOCAL nLen := 20
   LOCAL nRem := 20
   LOCAL cVar := SPACE(20)
   LOCAL oSay, oGet


   DEFINE FONT oFont NAME 'TAHOMA' SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 300,200 PIXEL

   @ 10,10 GET oGet VAR cVar SIZE 100,12 PIXEL OF oDlg ON CHANGE oSay:Refresh()
   @ 10,120 SAY oSay PROMPT STR( 20 - LEN(TRIM(oGet:cText)), 3, 0 ) SIZE 20,10 PIXEL OF oDlg COLOR CLR_BLACK,CLR_WHITE

   ACTIVATE DIALOG oDlg CENTERED

   RELEASE FONT oFont

RETURN NIL
Whenever the user enters a character in the get, the say displays the remaining number of characters he can enter.

Posted: Mon Dec 24, 2007 5:11 am
by nageswaragunupudi
Get ...On Change => can't refresh other objects .

Same problem to me , look like a bug .
From my above example you see that get on change can refresh other objects. There is no bug anywhere. It is just the way you use.

Posted: Mon Dec 24, 2007 6:02 am
by kokookao2007
nageswaragunupudi , Thank YOU.

Define Get ...On Change oSAY1:REFRESH() ==> WORK

Define Get ...On Change OBJECT_REFRESH() ==> NOT WORK
..
FUNTION OBJECT_REFRESH()
..
..
oBJECT1():REFRESH()
oBJECT2():REFRESH()
oBJECT3():REFRESH()

RETURN NIL

Best Regards
kokoo

Posted: Mon Dec 24, 2007 6:12 am
by nageswaragunupudi
Objects do refresh. You should ensure correct values to be reassigned to the object variables.
for example you wrote
nLEFT1:=LEN(PAY->RMK1)-LEN(TRIM(PAY->RMK1))
not correct
it should be
nLEFT1:=LEN(PAY->RMK1)-LEN(TRIM(oGet:cText))