RicEdit text filtern

  • also ich möchte ger aus nem RichEdit text rausfiltern :!: Also z.B. im Rich Steht "Hallo wie gehts" und ich möchte das der mir immer nur das wie sucht und mir sag wo es ist! Wenn es nit in Spalten geht kann es auch nur zeilen angeben, aber wenn es auch noch die spalte angibt währe mir lieber :!: Und dann hab ich noch ne Frage zum RichEdit, ich wollte mal wissen wie man es machen das man da bilder einfügen kann :?:
    Ich weiß ich bin eine Nervensäge, aber ich möchte eben gern Proggen :thumbup:
    Danke für eure hilfe :)

    mfg. Jam00

  • Teste mal das:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Function Name: _GUICtrlRichEdit_FindTextEx
    ; Description:: Sucht nach dem angegebenen Text
    ; Parameter(s): $h_RichEdit - RichEdit
    ; $SuchText - Text zum suchen
    ; $behavior - Suchverhalten $FR_DOWN, $FR_MATCHALEFHAMZA, $FR_MATCHCASE, $FR_MATCHDIAC, $FR_MATCHKASHIDA, $FR_WHOLEWORD
    ; $StartPos - [Optional] Anfangsposition (Standard: Anfang des Textes)
    ; $EndPos - [Optional] Endposition (Standard: Ende des Textes)
    ; $giveArray - [Optional] ein array mit Anfang und Ende des Suchstrings geben
    ; (Standard: Nur den Anfang)
    ; Requirement(s): RichEdit
    ; Return Value(s): Anfangsposition des Suchstrings oder array mit Anfang und Ende
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;

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

    Func _GUICtrlRichEdit_FindTextEx($h_RichEdit,$SuchText,$behavior=0,$StartPosition=0,$EndPosition=-1,$giveArray=0)
    Local $FINDTEXTEX = DllStructCreate($tagFINDTEXTEX)

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

    ; suchpositionen:
    Local $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEX, $UNICODE=""
    If @AutoItUnicode Then
    $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEXW
    $UNICODE = "w"
    EndIf

    DllStructSetData($FINDTEXTEX,1,$StartPosition) ; Anfang: 0 = von ganz oben
    DllStructSetData($FINDTEXTEX,2,$EndPosition) ; Ende: -1 = bis ganz ans Ende
    Local $structSuchText = DllStructCreate($UNICODE & "char[" & StringLen($SuchText)+1 & "]")
    DllStructSetData($structSuchText,1,$SuchText)
    DllStructSetData($FINDTEXTEX,3,DllStructGetPtr($structSuchText)) ; desn suchtext in die struct aufnehmen

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

    Local $start = _SendMessage($h_RichEdit,$EM_FINDTEXTEXUNICHECK,$behavior,DllStructGetPtr($FINDTEXTEX),0,"dword","ptr")
    If $giveArray Then
    Local $array[2] = [DllStructGetData($FINDTEXTEX,4),DllStructGetData($FINDTEXTEX,5)]
    Return $array
    EndIf
    Return $start
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von progandy (12. Dezember 2008 um 20:31)

  • funktioniert es bei dir? -> dann kann ichs in der neuen Version einbauen ;)
    Ähhm, hab grad nen Fehler gefunden :( Verbesser ich gleich.

  • Irgendwie geht da nix!

    Spoiler anzeigen
    [autoit]

    #include <GuiRichEdit.au3>

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

    $hgui = GUICreate("Rich Edit Example", 500, 550)

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

    $h_RichEdit = _GUICtrlRichEdit_Create($hgui, 10, 10, 480, 420, BitOR($ES_WANTRETURN, $WS_HSCROLL, $ES_SUNKEN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))

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

    $lResult = _SendMessage($h_RichEdit, $EM_SETEVENTMASK, 0, BitOR($ENM_REQUESTRESIZE, $ENM_LINK, $ENM_DROPFILES, $ENM_KEYEVENTS, $ENM_MOUSEEVENTS))

    $button = GUICtrlCreateButton("Exit", 100, 460, 100, 25)
    $button1 = GUICtrlCreateButton("Test", 300, 460, 100, 25)

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

    _GUICtrlRichEdit_SetText($h_RichEdit,"Hi!" & @CRLF & "Line2" & @CRLF & "Line3" & @CRLF)
    GUISetState()
    _GUICtrlRichEdit_AppendText($h_RichEdit,"Line4" & @CRLF & "Line5" & @CRLF & "Line6" & @CRLF)
    _GUICtrlRichEdit_SetSel($h_RichEdit, 7, 12)

    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0xFF0000,0)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x00FF00,1)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x0000FF,2)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0xFF0000,3)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x00FF00,4)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x0000FF,5)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    Exit
    Case $button1
    Call ("_GUICtrlRichEdit_FindTextEx")
    EndSwitch
    WEnd

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

    ;Prog@ndy
    Func _GUICtrlRichEdit_SetLineColor($h_RichEdit,$Color,$Line=-1)
    ; Start der Zeile holen
    Local $LineStart = _GUICtrlRichEdit_LineIndex($h_RichEdit,$Line)
    ; Länge der Zeile holen
    Local $LineLength = _GUICtrlRichEdit_LineLength($h_RichEdit,$LineStart)
    ; alte Markierung speichern
    Local $OldSel = _GUICtrlRichEdit_GetSelection($h_RichEdit)
    ; Zeile markieren
    _GUICtrlRichEdit_SetSel($h_RichEdit,$LineStart,$LineStart+$LineLength,1)
    ; Farbe für Markierung setzen
    _GUICtrlRichEdit_SetFontColor($h_RichEdit,__GCR_ColorConvert($Color),True)
    EndFunc
    $SuchText = "Hi!"
    Func _GUICtrlRichEdit_FindTextEx($h_RichEdit,$SuchText,$StartPosition=0,$EndPosition=-1,$giveArray=0)
    MsgBox (0,"","")
    Local $FINDTEXTEX = DllStructCreate($tagFINDTEXTEX)
    ; suchpositionen:
    Local $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEX, $UNICODE=""
    If @AutoItUnicode Then
    $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEXW
    $UNICODE = "w"
    EndIf
    MsgBox (0,"",$EM_FINDTEXTEX)
    DllStructSetData($FINDTEXTEX,1,0) ; Anfang: 0 = von ganz oben
    DllStructSetData($FINDTEXTEX,2,-1) ; Ende: -1 = bis ganz ans Ende
    Local $structSuchText = DllStructCreate($UNICODE & "char[" & StringLen($SuchText)+1 & "]")
    DllStructSetData($structSuchText,1,$SuchText)
    DllStructSetData($FINDTEXTEX,3,DllStructGetPtr($structSuchText)) ; desn suchtext in die struct aufnehmen
    Local $start = _SendMessage($h_RichEdit,$EM_FINDTEXTEXUNICHECK,DllStructGetPtr($FINDTEXTEX))
    If $giveArray And $start>=0 Then
    Local $array[2] = [DllStructGetData($FINDTEXTEX,4),DllStructGetData($FINDTEXTEX,5)]
    If $array[1] Then Return $array
    EndIf
    Return $start
    EndFunc

    [/autoit]

    Die MSGBOXen hab ich da rein gemacht, damit ich sehe was pasiert, aber er startet garnicht die Func

    mfg. Jam00

  • Erstens hatte die fnc nen fehler -< hab ich gefixt.
    2. musst du der Funktion RichEdit und suchtext übergeben...
    //Edit: findet aber irgendwie nichts...
    //Edit: Jetzt gehts. Aufruf:

    [autoit]

    $SuchText = InputBox("suche","suche")
    $ret = _GUICtrlRichEdit_FindTextEx($h_RichEdit,$SuchText,1)
    MsgBox(0, '', $ret)

    [/autoit]


    Die funktion im Post oben.

    2 Mal editiert, zuletzt von progandy (12. Dezember 2008 um 20:33)

  • wenn ich es starte zeigt der mit unten -->loaded MSFTEDIT.DLL, Unicode used also er started es aber zeigt orangen text an

    Wenn ich das starte

    Spoiler anzeigen
    [autoit]

    #include <GuiRichEdit.au3>

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

    $hgui = GUICreate("Rich Edit Example", 500, 550)

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

    $h_RichEdit = _GUICtrlRichEdit_Create($hgui, 10, 10, 480, 420, BitOR($ES_WANTRETURN, $WS_HSCROLL, $ES_SUNKEN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))

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

    $lResult = _SendMessage($h_RichEdit, $EM_SETEVENTMASK, 0, BitOR($ENM_REQUESTRESIZE, $ENM_LINK, $ENM_DROPFILES, $ENM_KEYEVENTS, $ENM_MOUSEEVENTS))

    $button = GUICtrlCreateButton("Exit", 100, 460, 100, 25)
    $button1 = GUICtrlCreateButton("Test", 300, 460, 100, 25)

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

    _GUICtrlRichEdit_SetText($h_RichEdit,"Hi!" & @CRLF & "Line2" & @CRLF & "Line3" & @CRLF)
    GUISetState()
    _GUICtrlRichEdit_AppendText($h_RichEdit,"Line4" & @CRLF & "Line5" & @CRLF & "Line6" & @CRLF)
    _GUICtrlRichEdit_SetSel($h_RichEdit, 7, 12)

    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0xFF0000,0)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x00FF00,1)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x0000FF,2)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0xFF0000,3)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x00FF00,4)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x0000FF,5)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    Exit
    Case $button1
    $SuchText = InputBox("suche","suche")
    $ret = _GUICtrlRichEdit_FindTextEx($h_RichEdit,$SuchText,1)
    MsgBox(0, '', $ret)
    EndSwitch
    WEnd

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

    ;Prog@ndy
    Func _GUICtrlRichEdit_SetLineColor($h_RichEdit,$Color,$Line=-1)
    ; Start der Zeile holen
    Local $LineStart = _GUICtrlRichEdit_LineIndex($h_RichEdit,$Line)
    ; Länge der Zeile holen
    Local $LineLength = _GUICtrlRichEdit_LineLength($h_RichEdit,$LineStart)
    ; alte Markierung speichern
    Local $OldSel = _GUICtrlRichEdit_GetSelection($h_RichEdit)
    ; Zeile markieren
    _GUICtrlRichEdit_SetSel($h_RichEdit,$LineStart,$LineStart+$LineLength,1)
    ; Farbe für Markierung setzen
    _GUICtrlRichEdit_SetFontColor($h_RichEdit,__GCR_ColorConvert($Color),True)
    EndFunc
    Func _GUICtrlRichEdit_FindTextEx($h_RichEdit,$SuchText,$behavior=0,$StartPosition=0,$EndPosition=-1,$giveArray=0)
    Local $FINDTEXTEX = DllStructCreate($tagFINDTEXTEX)

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

    ; suchpositionen:
    Local $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEX, $UNICODE=""
    If @AutoItUnicode Then
    $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEXW
    $UNICODE = "w"
    EndIf

    DllStructSetData($FINDTEXTEX,1,$StartPosition) ; Anfang: 0 = von ganz oben
    DllStructSetData($FINDTEXTEX,2,$EndPosition) ; Ende: -1 = bis ganz ans Ende
    Local $structSuchText = DllStructCreate($UNICODE & "char[" & StringLen($SuchText)+1 & "]")
    DllStructSetData($structSuchText,1,$SuchText)
    DllStructSetData($FINDTEXTEX,3,DllStructGetPtr($structSuchText)) ; desn suchtext in die struct aufnehmen

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

    Local $start = _SendMessage($h_RichEdit,$EM_FINDTEXTEXUNICHECK,$behavior,DllStructGetPtr($FINDTEXTEX),0,"dword","ptr")
    If $giveArray Then
    Local $array[2] = [DllStructGetData($FINDTEXTEX,4),DllStructGetData($FINDTEXTEX,5)]
    Return $array
    EndIf
    Return $start
    EndFunc

    [/autoit]


    hängt sich AutoIt auf, also wenn ich auf Test klicke

    mfg. Jam00

  • die DLL müsste stimmen, ist bei XP dabei. und wenn dransteht, dass sie geladen ist, dann ist sie das auch ;)
    versuch mal die zeilen zu löschen:

    Spoiler anzeigen
    [autoit]

    If @AutoItUnicode Then
    $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEXW
    $UNICODE = "w"
    EndIf

    [/autoit]


    und wenn du schon die beta verwendest, dann doch de neusete. 3.2.13.12

  • ich hab genau dein Beispile, nur ohne @AutoItUicode, wobei es bei mir auch mit funktioniert ;)

    Spoiler anzeigen
    [autoit]

    #include <GuiRichEdit.au3>

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

    $hgui = GUICreate("Rich Edit Example", 500, 550)

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

    $h_RichEdit = _GUICtrlRichEdit_Create($hgui, 10, 10, 480, 420, BitOR($ES_WANTRETURN, $WS_HSCROLL, $ES_SUNKEN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))

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

    $lResult = _SendMessage($h_RichEdit, $EM_SETEVENTMASK, 0, BitOR($ENM_REQUESTRESIZE, $ENM_LINK, $ENM_DROPFILES, $ENM_KEYEVENTS, $ENM_MOUSEEVENTS))

    $button = GUICtrlCreateButton("Exit", 100, 460, 100, 25)
    $button1 = GUICtrlCreateButton("Test", 300, 460, 100, 25)

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

    _GUICtrlRichEdit_SetText($h_RichEdit,"Hi!" & @CRLF & "Line2" & @CRLF & "Line3" & @CRLF)
    GUISetState()
    _GUICtrlRichEdit_AppendText($h_RichEdit,"Line4" & @CRLF & "Line5" & @CRLF & "Line6" & @CRLF)
    _GUICtrlRichEdit_SetSel($h_RichEdit, 7, 12)

    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0xFF0000,0)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x00FF00,1)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x0000FF,2)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0xFF0000,3)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x00FF00,4)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x0000FF,5)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    Exit
    Case $button1
    $SuchText = InputBox("suche","suche")
    $ret = _GUICtrlRichEdit_FindTextEx($h_RichEdit,$SuchText,1)
    MsgBox(0, '', $ret)
    EndSwitch
    WEnd

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

    ;Prog@ndy
    Func _GUICtrlRichEdit_SetLineColor($h_RichEdit,$Color,$Line=-1)
    ; Start der Zeile holen
    Local $LineStart = _GUICtrlRichEdit_LineIndex($h_RichEdit,$Line)
    ; Länge der Zeile holen
    Local $LineLength = _GUICtrlRichEdit_LineLength($h_RichEdit,$LineStart)
    ; alte Markierung speichern
    Local $OldSel = _GUICtrlRichEdit_GetSelection($h_RichEdit)
    ; Zeile markieren
    _GUICtrlRichEdit_SetSel($h_RichEdit,$LineStart,$LineStart+$LineLength,1)
    ; Farbe für Markierung setzen
    _GUICtrlRichEdit_SetFontColor($h_RichEdit,__GCR_ColorConvert($Color),True)
    EndFunc
    Func _GUICtrlRichEdit_FindTextEx($h_RichEdit,$SuchText,$behavior=0,$StartPosition=0,$EndPosition=-1,$giveArray=0)
    Local $FINDTEXTEX = DllStructCreate($tagFINDTEXTEX)

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

    ; suchpositionen:
    Local $EM_FINDTEXTEXUNICHECK = $EM_FINDTEXTEX, $UNICODE=""

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


    DllStructSetData($FINDTEXTEX,1,$StartPosition) ; Anfang: 0 = von ganz oben
    DllStructSetData($FINDTEXTEX,2,$EndPosition) ; Ende: -1 = bis ganz ans Ende
    Local $structSuchText = DllStructCreate($UNICODE & "char[" & StringLen($SuchText)+1 & "]")
    DllStructSetData($structSuchText,1,$SuchText)
    DllStructSetData($FINDTEXTEX,3,DllStructGetPtr($structSuchText)) ; desn suchtext in die struct aufnehmen

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

    Local $start = _SendMessage($h_RichEdit,$EM_FINDTEXTEXUNICHECK,$behavior,DllStructGetPtr($FINDTEXTEX),0,"dword","ptr")
    If $giveArray Then
    Local $array[2] = [DllStructGetData($FINDTEXTEX,4),DllStructGetData($FINDTEXTEX,5)]
    Return $array
    EndIf
    Return $start
    EndFunc

    [/autoit]
  • Du kannst dir doch auch was mit _StringBetween() zusammenbasteln... Du könntest dir dann das mit dem Array unutze machen:
    Verteile jedes Wort in ein Element des Arrays und such darin das "wie", dann hast du auch die Nummer.

    Achtung! beachte aber, dass du GUICtrlRead() verwenden musst.
    Tipp:

    [autoit]

    $String = GUICtrlRead($Edit1, 0)

    [/autoit]


    dann kannst du den String auch so benutzen...