PureBasic Forum
https://www.purebasic.fr/english/

Tip: Dingless StringGadget
https://www.purebasic.fr/english/viewtopic.php?f=12&t=3802
Page 1 of 1

Author:  BackupUser [ Mon Sep 09, 2002 12:36 pm ]
Post subject:  Tip: Dingless StringGadget

Code updated For 5.20+
Restored from previous forum. Originally posted by PB.

Code:
; 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.

Author:  BackupUser [ Mon Sep 09, 2002 2:17 pm ]
Post subject: 

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:
; 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

Author:  Randy Walker [ Thu Nov 04, 2004 1:46 pm ]
Post subject: 

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.

Author:  PB [ Thu Nov 04, 2004 7:18 pm ]
Post subject: 

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).

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/