Page 1 of 2

Posted: Sun Dec 09, 2007 11:13 pm
by netmaestro

Code: Select all

OpenWindow(0,0,0,320,240,"",$CA0001)
CreateGadgetList(WindowID(0))
EditorGadget(0,0,0,320,200)
ButtonGadget(1,120,210,80,20,"Add France")
SetGadgetText(0, "The rain in Spain falls mainly on the plain.")

Repeat
  ev = WaitWindowEvent()
  Select ev
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          SetActiveGadget(0)
          SendMessage_(GadgetID(0), #EM_SETSEL, 18,18)
          SendMessage_(GadgetID(0), #EM_REPLACESEL, 1, @" and France ")
      EndSelect
  EndSelect
Until ev = #WM_CLOSE

Posted: Sun Dec 09, 2007 11:18 pm
by srod
Beat me by precisely 3.2 seconds! :)

Posted: Sun Dec 09, 2007 11:22 pm
by Matt
Thanks, yes, I tried that, but
My problem: how do I deal with the returns entered into the editor gadget though.

Try typing, press return a few times, time some more and then try entering it on the 4th line or so.

Posted: Sun Dec 09, 2007 11:22 pm
by netmaestro
If I'm at the screen when a question gets posted, I don't lose too many! Some, but not many.

A scintilla gadget like the current PB editor uses will have its own messages you can send, but afaik it's a subclassed richedit control, so the normal messages should work too. I'm not too up on scintilla atm. It's on the todo list for someday as it looks quite interesting.

Posted: Sun Dec 09, 2007 11:26 pm
by Matt
http://www.purebasic.fr/english/viewtop ... 6111#25039

Like that code that freak posted, but it doesn't work with editor gadgets with multiple lines, I can't figure out how to edit it to do so.

Posted: Sun Dec 09, 2007 11:44 pm
by netmaestro
Sorry, I don't understand the problem. The same method works here to insert text on one of the empty lines after pressing return a few times.

Posted: Mon Dec 10, 2007 12:08 am
by Matt

Code: Select all

Heres the code:

; PureBasic Visual Designer v3.70a Beta


;- Window Constants
;
#Window_0 = 0

;- Gadget Constants
;
#Gadget_1 = 0
#original = 1
#start = 2


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 402, 160, 293, 79, "test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Gadget_1, 10, 10, 100, 30, "Enter String and select a piece:")
      EditorGadget(#original, 110, 10, 170, 133)
      ButtonGadget(#start, 10, 40, 70, 20, "make bold")
     
    EndIf
  EndIf
EndProcedure


Open_Window_0()

Repeat
  Event = WaitWindowEvent()
 
  If event = #PB_Event_Gadget And EventGadget() = #start
 
    original.s = GetGadgetText(#original) ; get strings from Gadget
    new.s = ""
   
    ; get selected position from #original Gadget
    SendMessage_(GadgetID(#original), #EM_GETSEL, @startpos.l, @endpos.l)
   
    new = Left(original, startpos)  ; unselected part on the left
    new + "<B>"    ; bold mark
    new + Mid(original, startpos+1, endpos-startpos) ; marked text
    new + "</B>"   ; unbold mark
    new + Right(original, Len(original)-endpos) ; unselected part on the right
   
    SetGadgetText(#original, new) ; set new text


    ; set selection again (3 characters right of original position, because we
    ; added the <b>
    SendMessage_(GadgetID(#original), #EM_SETSEL, startpos+3, endpos+3)
    setActiveGadget(#original)  ; activate Gadget again
 
 
  EndIf
 
Until Event = #PB_Event_CloseWindow
End 
Try typing this in the box:
fdsfdsfjkdjsla


fjdsklfjdsl

dsada
And then put your cursor between s and a on the last line
and try entering the bold stuff
doesn't work right here...

I get:
jkjkl


jkl
<B></B>

hjk

Posted: Mon Dec 10, 2007 12:24 am
by srod
I'm not sure what you're after, but try this :

Code: Select all


; PureBasic Visual Designer v3.70a Beta 


;- Window Constants 
; 
#Window_0 = 0 

;- Gadget Constants 
; 
#Gadget_1 = 0 
#original = 1 
#start = 2 


Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 402, 160, 293, 79, "test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar) 
    If CreateGadgetList(WindowID(#Window_0)) 
      TextGadget(#Gadget_1, 10, 10, 100, 30, "Enter String and select a piece:") 
      EditorGadget(#original, 110, 10, 170, 133) 
      ButtonGadget(#start, 10, 40, 70, 20, "make bold") 
      
    EndIf 
  EndIf 
EndProcedure 


Open_Window_0() 

Repeat 
  Event = WaitWindowEvent() 
  
  If event = #PB_Event_Gadget And EventGadget() = #start 
  
    a$=""
    SendMessage_(GadgetID(#original), #EM_GETSEL, @startpos.l, @endpos.l) 
    If endpos > startpos
      a$=Space(endpos-startpos+1)
      SendMessage_(GadgetID(#original), #EM_GETSELTEXT, 0, @a$)
    EndIf
    a$ = "<B>"+a$+"</B>"
    SendMessage_(GadgetID(#original), #EM_REPLACESEL, #True, @a$)
    SetActiveGadget(#original)  ; activate Gadget again 
  EndIf 
  
Until Event = #PB_Event_CloseWindow 
End 

Posted: Mon Dec 10, 2007 1:09 am
by yrreti
Try this code selecting a position with the mouse and pasting.

Code: Select all

OpenWindow(0,0,0,320,240,"",$CA0001)
CreateGadgetList(WindowID(0))
EditorGadget(0,0,0,320,200)
ButtonGadget(1,60,210,220,20,"use mouse to select a place and press this")
SetGadgetText(0, "The rain in Spain falls mainly on the plain."+Chr(10)+"The rain in France falls mainly on the plain.")

Repeat
  ev = WaitWindowEvent()
  Select ev
    Case #PB_Event_Gadget
      
 
    SendMessage_(GadgetID(0), #EM_GETSEL, @startpos.l, @endpos.l)
     
            
      Select EventGadget()
        Case 1
        	a$ = " [I put this here] "
          SetActiveGadget(0)
          SendMessage_(GadgetID(0), #EM_REPLACESEL, #True, @a$)         
      EndSelect
  EndSelect
Until ev = #WM_CLOSE
I still would like to know if it's possible to send code from an external app to the editor if it can be done?

Posted: Mon Dec 10, 2007 2:24 am
by Matt
Thank you srod and yrreti they both worked perfect.

srod, How do you not know what I was after? :P
I was trying to enter text at the location of the cursor in a editor gadget. The code freak posted would not work with multi-line text, the string to be added at the cursor's position was not added there correctly.

Matt

Question:
SendMessage_(GadgetID(0), #EM_GETSEL, @startpos.l, @endpos.l)
what is that line doing in yrreti's code? I suppose nothing?

Posted: Mon Dec 10, 2007 2:59 am
by yrreti
Your right, that line is not needed. It was just some code
from another project that I didn't remove and wasn't sure about.

Posted: Mon Dec 10, 2007 3:09 am
by Matt
Thanks, exactly what a I needed! :)