Page 1 of 1

Tip: Dingless StringGadget

Posted: Mon Sep 09, 2002 12:36 pm
by BackupUser
Code updated For 5.20+
Restored from previous forum. Originally posted by PB.

Code: Select all

; Dingless StringGadget example by PB and Timo -- do whatever you want with it.
; Shows how to avoid the "ding" sound when Esc/Enter is pressed on a StringGadget.

If OpenWindow(0,200,250,450,200,"Test",#PB_Window_SystemMenu)
  sg=StringGadget(1,20,20,100,21,"1234567890",#ES_MULTILINE|#ES_AUTOVSCROLL)
  SetActiveGadget(1)
  Repeat
    ev=WaitWindowEvent()
    If ev=#PB_Event_Gadget
      a$=GetGadgetText(1)
      pos=FindString(a$,#CRLF$,1)
      If pos0 ; Was Enter pressed on the StringGadget?
        SetGadgetText(1,ReplaceString(a$,#CRLF$,"")) ; Yes, so remove CR+LF.
        SendMessage_(sg,#EM_SETSEL,pos-1,pos-1) ; Move cursor back to where Enter was pressed.
      EndIf
    EndIf
  Until ev=#PB_Event_CloseWindow
EndIf
Edit: Updated for PureBasic v4.00 on 12 Aug 2006.

Posted: Mon Sep 09, 2002 2:17 pm
by BackupUser
Restored from previous forum. Originally posted by freak.

Thanks, for the Tip, i needed that, too.

> Can somebody come up with a better way to restore the cursor position? Thanks!

Here we go...

Code: Select all

; Dingless StringGadget example by PB -- do whatever you want with it.
; Shows how to avoid the "ding" sound when Esc/Enter is pressed on a StringGadget.
;
If OpenWindow(0,100,150,450,200,#PB_Window_SystemMenu,"Test")
  CreateGadgetList(WindowID())
  sg=StringGadget(1,20,20,100,21,"",#PB_String_Multiline|#ES_AUTOVSCROLL)
  ActivateGadget(1)
  Repeat
    ev=WaitWindowEvent()
    If ev=#PB_EventGadget
      a$=GetGadgetText(1) : pos=FindString(a$,Chr(13)+Chr(10),1)
      If pos0 ; Was Enter pressed on the StringGadget?
        SetGadgetText(1,ReplaceString(a$,Chr(13)+Chr(10),"")) ; Yes, so remove CR+LF.
        SendMessage_(GadgetID(1), #EM_SETSEL, pos, pos)  ; Set cursor Position
      EndIf
    EndIf
  Until ev=#PB_EventCloseWindow
EndIf

Timo

Posted: Thu Nov 04, 2004 1:46 pm
by Randy Walker
I tried to use this approach in my code and it didn't work. I had a plain StringGadget with no flags so I added them in accordance with the sample above and it worked.

#PB_String_Multiline|#ES_AUTOVSCROLL

Makes sense but wasn't obvious to me at first, just in case anyone else stumbles on this one.

Posted: Thu Nov 04, 2004 7:18 pm
by PB
Yes, #PB_String_Multiline|#ES_AUTOVSCROLL is what stops the ding sound,
otherwise Windows thinks the gadget is a single line and won't allow Enter to
be pressed on it (which gives the sound).