Tip: Dingless StringGadget

Share your advanced PureBasic knowledge/code with the community.
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Tip: Dingless StringGadget

Post 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.
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post 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
Randy Walker
Enthusiast
Enthusiast
Posts: 478
Joined: Sun Jul 25, 2004 4:21 pm
Location: US

Post 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.
- - - - - - - - - - - - - - - -
Randy
IF (PureBasic > PowerBasic) AND (PowerBasic > Visual_Basic) THEN PureBasic RULES!!!!
PB
PureBasic Expert
PureBasic Expert
Posts: 7581
Joined: Fri Apr 25, 2003 5:24 pm

Post 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).
I compile using 5.31 (x86) on Win 7 Ultimate (64-bit).
"PureBasic won't be object oriented, period" - Fred.
Post Reply