Anfangs- und Endposition eines Wortes im RichEdit herausfinden

  • Hi Leute,

    habe jetzt viel in der Hilfe nachgeschaut, vieles gefunden, auch SUFU benutzt, auch vieles gefunden, doch sogut wie nichts hat mich weitergebracht. In der Hilfe gibt es nur Funktionen die die Textposition (wie in _GUICtrlRichEdit_SetSel()) eines markierten Wortes herausfinden können. Gibt es auch eine, die ein z.B. bekanntes Wort im Text (wie z.B. "Hase") finden kann und die Anfangs- und Endposition zurückgibt?

    Beispiel
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    $Form1 = GUICreate("Beispiel", 306, 106, 192, 124)
    $Edit1 = _GUICtrlRichEdit_Create($Form1, StringFormat("Es war ein mal ein Hase, der sehr \r\nböse war."), 8, 8, 185, 89)
    $Label1 = GUICtrlCreateLabel("Position von 'Hase':", 200, 8, 103, 17)
    $Label2 = GUICtrlCreateLabel("19/23", 232, 32, 33, 17)
    $Button1 = GUICtrlCreateButton("'Hase' Position", 208, 64, 83, 25)
    GUISetState(@SW_SHOW)
    OnAutoItExitRegister("_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
    If $msg = $Button1 Then
    MsgBox(0,"Position", _FunktionUmPositionHerauszufinden())
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GUICtrlRichEdit_Destroy($Edit1)
    GUIDelete($Form1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _FunktionUmPositionHerauszufinden()
    EndFunc

    [/autoit]

    MfG,

    BurakSZ

    Einmal editiert, zuletzt von BurakSZ (22. Juni 2010 um 14:58)

  • Hallo BurakSZ,

    mach es doch einfach so:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    $Form1 = GUICreate("Beispiel", 306, 106, 192, 124)
    $Edit1 = _GUICtrlRichEdit_Create($Form1, StringFormat("Es war ein mal ein Hase, der sehr \r\nböse war."), 8, 8, 185, 89)
    $Label1 = GUICtrlCreateLabel("Position von 'Hase':", 200, 8, 103, 17)
    $Label2 = GUICtrlCreateLabel("19/23", 232, 32, 33, 17)
    $Button1 = GUICtrlCreateButton("'Hase' Position", 208, 64, 83, 25)
    GUISetState(@SW_SHOW)
    OnAutoItExitRegister("_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
    If $msg = $Button1 Then
    MsgBox(0,"Position", _FunktionUmPositionHerauszufinden())
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GUICtrlRichEdit_Destroy($Edit1)
    GUIDelete($Form1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _FunktionUmPositionHerauszufinden()
    _GUICtrlRichEdit_GotoCharPos($Edit1,1)
    Return(_GUICtrlRichEdit_FindText($Edit1,"Hase",True,False,True))
    EndFunc

    [/autoit]

    mfg (Auto)Bert

  • Vielen Dank, aber daher ich die ganze Position brauche, habe ich

    [autoit]

    _GUICtrlRichEdit_FindTextInRange()

    [/autoit]

    benutzt. Die Lösung sieht wie folgt aus:

    Lösung
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <Array.au3>
    $Form1 = GUICreate("Beispiel", 306, 106, 192, 124)
    $Edit1 = _GUICtrlRichEdit_Create($Form1, StringFormat("Es war ein mal ein Hase, der sehr \r\nböse war."), 8, 8, 185, 89)
    $Label1 = GUICtrlCreateLabel("Position von 'Hase':", 200, 8, 103, 17)
    $Label2 = GUICtrlCreateLabel("19/23", 232, 32, 33, 17)
    $Button1 = GUICtrlCreateButton("'Hase' Position", 208, 64, 83, 25)
    GUISetState(@SW_SHOW)
    OnAutoItExitRegister("_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
    If $msg = $Button1 Then
    $Pos = _GUICtrlRichEdit_FindTextInRange($Edit1, "Hase", 0, -1, True, True)
    _ArrayDisplay($Pos)
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GUICtrlRichEdit_Destroy($Edit1)
    GUIDelete($Form1)
    EndFunc

    [/autoit]
    [autoit]

    _GUICtrlRichEdit_GotoCharPos()

    [/autoit]

    wird hierbei auch nicht benötigt.

    Mit freundlichen Grüßen,
    BurakSZ