Описание функции
SCI_FINDTEXT
Получает позицию начала и конца искомого текста в документе.
pos = ScintillaSendMessage(#Gadget, #SCI_FINDTEXT, flag, @Search)
Параметры
flag | Флаги поиска могут быть комбинацией следующих значений: #SCFIND_MATCHCASE - учитывать регистр #SCFIND_WHOLEWORD - целое слово #SCFIND_WORDSTART - совпадение от начала слова #SCFIND_REGEXP - регулярное выражение |
@Search |
Указатель на структуру SCTextToFind, определяющую параметры поиска. Поля структуры: Search\chrg\cpMin - позиция начала поиска, 0 если от начала. Search\chrg\cpMax - позиция конца поиска, использовать #SCI_GETLENGTH для запроса длины данных Search\lpstrText - указатель на строку UTF8, соответственно получить его используя функцию UTF8() Search\chrgText\cpMin - сюда возвращается начало найденного Search\chrgText\cpMax - сюда возвращается конец найденного |
Возвращаемое значение
Возвращает позицию найденного в байтах (отсчёт от 0), или -1 если ничего не найдено. |
См. также
SCI_GETLENGTHПример
EnableExplicit
#Window = 0
Enumeration
#SciGt
#btnNext
#field
EndEnumeration
Define *Text, Search.SCTextToFind, SearchText.s, pos, Change
If Not InitScintilla()
End
EndIf
Procedure FindText(id, *Search.SCTextToFind, flag = 0)
Protected pos
pos = ScintillaSendMessage(id, #SCI_FINDTEXT, flag, *Search)
If pos > - 1
ScintillaSendMessage(id, #SCI_SETSELECTIONSTART, *Search\chrgText\cpMin, 0)
ScintillaSendMessage(id, #SCI_SETSELECTIONEND, *Search\chrgText\cpMax, 0)
EndIf
ProcedureReturn pos
EndProcedure
If OpenWindow(#Window, 0, 0, 530, 190, "ScintillaGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ScintillaGadget(#SciGt, 10, 10, 510, 130, 0)
ButtonGadget(#btnNext, 10, 150, 100, 30, "Start")
SearchText = "s"
StringGadget(#field, 120, 150, 60, 30, SearchText)
*Text = UTF8("This is a simple ScintillaGadget with text... ")
ScintillaSendMessage(#SciGt, #SCI_SETTEXT, 0, *Text)
FreeMemory(*Text)
*Text = UTF8(SearchText)
Search\chrg\cpMin = 0
Search\chrg\cpMax = ScintillaSendMessage(#SciGt, #SCI_GETLENGTH)
Search\lpstrText = *Text
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #field
If EventType() = #PB_EventType_Change
Change = 1
DisableGadget(#btnNext, #False)
SetGadgetText(#btnNext, "Start")
EndIf
Case #btnNext
If Change = 1
Change = 0
SearchText = GetGadgetText(#field)
If Asc(SearchText)
FreeMemory(*Text)
*Text = UTF8(SearchText)
Search\chrg\cpMin = 0
Search\chrg\cpMax = ScintillaSendMessage(#SciGt, #SCI_GETLENGTH)
Search\lpstrText = *Text
EndIf
EndIf
If Asc(SearchText)
pos = FindText(#SciGt, @Search, #SCFIND_MATCHCASE)
If pos > -1
Search\chrg\cpMin = Search\chrgText\cpMax
SetGadgetText(#btnNext, "Next")
Else
DisableGadget(#btnNext, #True)
EndIf
EndIf
EndSelect
Case #PB_Event_CloseWindow
FreeMemory(*Text)
CloseWindow(#Window)
End
EndSelect
ForEver
EndIf