Code: Select all
; Find text strings inside an editorgadget
Procedure Editor_FindText(Gadget.i, TextToFind.s, ResetFlag.i)
If Gadget.i <> 0
If GadgetType(Gadget.i) = #PB_GadgetType_Editor
Debug "EditorGadget being passed correctly"
Debug TextToFind.s
EndIf
Else
Debug "No editorgadget passed, what's going on??"
EndIf
editFind.FINDTEXT
; Reset search to beginning
SendMessage_(GadgetID(Gadget.i), #EM_SETSEL, 0, 0)
; For resetting to default text
If ResetFlag.i
SendMessage_(GadgetID(Gadget.i), #EM_SETCHARFORMAT, #SCF_ALL, defaultFormat)
EndIf
editFind\chrg\cpMin = 0
editFind\lpstrText = @TextToFind
Repeat
found.i = SendMessage_(GadgetID(Gadget.i), #EM_FINDTEXT, #FR_DOWN, editFind)
If found.i > - 1
editFind\chrg\cpMin = found.i + 1
SendMessage_(GadgetID(Gadget.i), #EM_SETSEL, found.i, found.i + Len(TextToFind.s)) ; Set the selection to highlight
format.CHARFORMAT
format\cbSize = SizeOf(CHARFORMAT)
format\dwMask = #CFM_ITALIC | #CFM_BOLD | #CFM_STRIKEOUT | #CFM_UNDERLINE
format\dwEffects = #CFM_BOLD | #CFM_UNDERLINE
SendMessage_(GadgetID(Gadget.i), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndIf
Until found.i = -1
SendMessage_(GadgetID(Gadget.i), #EM_SETSEL, 0, 0)
EndProcedure
Editor_FindText(#MyGadget, "Bugger!", 1)