Описание функции


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