Что нового

_GUICtrlRichEdit: выделение всех указанных слов

sterro_sasha

Новичок
Сообщения
44
Репутация
1
Здравствуйте. Помогите пожалуйста, этот пример демонстрирует возможность выделение указанного слова. Все работает, но он выделяет только одно слово, даже если в тексте их два (test).

Кажется нужно искать повторно слово с точки выделения предыдущего и если оно есть - выделять цветом. А если нет - завершать работу функции. Алгоритм кажется такой? Но как это сделать?


Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIRichEdit.au3>

Global $sLast_Search = ""

$hGUI = GUICreate("Example (" & StringTrimRight(@ScriptName, 4) & ")", 320, 350, -1, -1)

$hRichEdit = _GUICtrlRichEdit_Create($hGUI, "test and test and", 10, 10, 300, 220, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
$nSearch_Bttn = GUICtrlCreateButton("Search", 140, 310, 70, 30)

GUISetState()

While 1
    $iMsg = GUIGetMsg()

    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            GUIDelete()
            Exit
        Case $nSearch_Bttn
            $sLast_Search = InputBox("Search in RichEdit", "Enter word: test", $sLast_Search, "", -1, -1, Default, Default, 0, $hGUI)
            If @error Or $sLast_Search = "" Then ContinueLoop

            _GUICtrlRichEdit_FindAndSelText($hRichEdit, $sLast_Search)
    EndSwitch
WEnd

Func _GUICtrlRichEdit_FindAndSelText($hRichEdit, $sText)
    If $sText = "" Then
        Return SetError(1)
    EndIf

    Local $iAnchor, $iActive

    _GUICtrlRichEdit_SetSel($hRichEdit, 0, 0)

    $iAnchor = _GUICtrlRichEdit_FindText($hRichEdit, $sText)
    $iActive = $iAnchor + StringLen($sText)

    Return _GUICtrlRichEdit_SetSel($hRichEdit, $iAnchor, $iActive)
EndFunc
 

Prog

Продвинутый
Сообщения
536
Репутация
65
В цикле вызывайте _GUICtrlRichEdit_FindText до тех пор пока не вернет -1. Когда результат больше нуля, функция нашла очередное совпадение и выделите его.
 
Автор
S

sterro_sasha

Новичок
Сообщения
44
Репутация
1
Что то не могу понять почему функция не возвращает ошибку:

Код:
Func _GUICtrlRichEdit_FindAndSelText($hRichEdit, $sText)
    If $sText = "" Then
        Return SetError(1)
    EndIf

    Local $iAnchor, $iActive

    _GUICtrlRichEdit_SetSel($hRichEdit, 0, 0)
    While 1
        $iAnchor = _GUICtrlRichEdit_FindText($hRichEdit, $sText)
        If @error Then ExitLoop
        $iActive = $iAnchor + StringLen($sText)
        _GUICtrlRichEdit_SetSel($hRichEdit, $iAnchor, $iActive)
    WEnd
EndFunc   ;==>_GUICtrlRichEdit_FindAndSelText
 

Prog

Продвинутый
Сообщения
536
Репутация
65
Код:
Func _GUICtrlRichEdit_FindAndSelText($hRichEdit, $sText)
    If $sText = "" Then
        Return SetError(1)
    EndIf

    Local $iAnchor, $iActive

    _GUICtrlRichEdit_SetSel($hRichEdit, 0, 0)
    While 1
        $iAnchor = _GUICtrlRichEdit_FindText($hRichEdit, $sText)
        If $iAnchor=-1 Then ExitLoop
        $iActive = $iAnchor + StringLen($sText)
        _GUICtrlRichEdit_SetSel($hRichEdit, $iAnchor, $iActive)
        _GUICtrlRichEdit_SetCharColor($hRichEdit, 0xFFFFFF)
        _GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0xFF0000)
        _GUICtrlRichEdit_SetSel($hRichEdit, $iActive, $iActive)
    WEnd
EndFunc   ;==>_GUICtrlRichEdit_FindAndSelText
 
Автор
S

sterro_sasha

Новичок
Сообщения
44
Репутация
1
Код:
Func _GUICtrlRichEdit_FindAndSelText($hRichEdit, $sText)
    If $sText = "" Then
        Return SetError(1)
    EndIf

    Local $iAnchor, $iActive

    _GUICtrlRichEdit_SetSel($hRichEdit, 0, 0)
    While 1
        $iAnchor = _GUICtrlRichEdit_FindText($hRichEdit, $sText)
        If $iAnchor=-1 Then ExitLoop
        $iActive = $iAnchor + StringLen($sText)
        _GUICtrlRichEdit_SetSel($hRichEdit, $iAnchor, $iActive)
        _GUICtrlRichEdit_SetCharColor($hRichEdit, 0xFFFFFF)
        _GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0xFF0000)
        _GUICtrlRichEdit_SetSel($hRichEdit, $iActive, $iActive)
    WEnd
EndFunc   ;==>_GUICtrlRichEdit_FindAndSelText
Огромное вам спасибо!
 
Верх