Code: Select all
Procedure GoSCI_Search(id, search.s, direction, flags)
Protected *mem, pos, result
Protected selstart, selend
If search
*mem = AllocateMemory(StringByteLength(search, #PB_UTF8) + 1)
If *mem
PokeS(*mem, search, -1, #PB_UTF8)
If direction = 0
pos = ScintillaSendMessage(id, #SCI_GETSELECTIONSTART) - 1
Else
pos = ScintillaSendMessage(id, #SCI_GETSELECTIONEND) + 1
EndIf
ScintillaSendMessage(id, #SCI_SETSEL, pos, pos)
ScintillaSendMessage(id, #SCI_SEARCHANCHOR)
If direction
result = ScintillaSendMessage(id, #SCI_SEARCHNEXT, flags, *mem)
Else
result = ScintillaSendMessage(id, #SCI_SEARCHPREV, flags, *mem)
EndIf
If result <> -1
selstart = ScintillaSendMessage(id, #SCI_GETSELECTIONSTART)
selend = ScintillaSendMessage(id, #SCI_GETSELECTIONEND)
GOSCI_SetState(id, #GOSCI_CURRENTLINE, ScintillaSendMessage(id, #SCI_LINEFROMPOSITION, result))
ScintillaSendMessage(id, #SCI_SETSELECTIONSTART, selstart)
ScintillaSendMessage(id, #SCI_SETSELECTIONEND, selend)
ScintillaSendMessage(id, #SCI_SCROLLCARET)
EndIf
FreeMemory(*mem)
EndIf
ProcedureReturn result
EndIf
EndProcedure