_GUICtrlRichEdit_FindTextEx Problem [gelöst] - Sci Lexer Fragen

  • Hi @all

    Ich habe folgenden Code:

    Spoiler anzeigen
    [autoit]

    #include <GUIRichEdit.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GuiEdit.au3>
    #include <Misc.au3>

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

    HotKeySet("{TAB}","_func_tabulator")
    #region - GUI Create
    Global $hGUI = GUICreate('',1100,700,-1,-1,$WS_MINIMIZEBOX+ $WS_CAPTION+ $WS_POPUP+ $WS_SYSMENU + $WS_MAXIMIZEBOX)
    $hRichEdit = _GUICtrlRichEdit_Create($hGUI,0,0,1100,700,BitOR($ES_WANTRETURN, $WS_HSCROLL, $ES_SUNKEN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    $lResult = _SendMessage($hRichEdit, $EM_SETEVENTMASK, 0, $ENM_KEYEVENTS)
    GUISETSTATE(@SW_SHOW)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    #endregion

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

    #region - GUI SelectLoop
    While 1
    $pos = WinGetPos($hGUI)
    $c = ControlGetPos($hGUI,"",$hRichEdit)
    If $pos[2] <> $c[2] or $pos[3] <> $c[3] Then
    ControlMove($hGUI,"",$hRichEdit,0,0,$pos[2],$pos[3])
    Endif
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd
    #endregion

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hRichEdit

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

    Select
    Case $iCode = $EN_MSGFILTER
    Local $tMsgFilter = DllStructCreate($tagEN_MSGFILTER, $ilParam)
    If DllStructGetData($tMsgFilter, 4) = $WM_KEYDOWN Then
    $hTxt = _GUICtrlRichEdit_GetText($hRichEdit)
    $hLines = _GUICtrlRichEdit_GetLineCount($hRichEdit)
    If StringInStr($hTxt,"<?php") Then
    $hPost = _GUICtrlRichEdit_FindTextEx($hRichEdit,"<?php",0,$hLines,1)
    Endif
    EndIf
    EndSelect
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func _func_tabulator()
    $txt = _GUICtrlRichEdit_GetText($hRichEdit)
    $replace_txt = $txt & " "
    _GUICtrlRichEdit_InsertText($hRichEdit," ")
    EndFunc

    [/autoit]

    Allerdings kommt ein fehler wenn man <?php eingibt : Autoit v3 Script funktioniert nicht mehr und bricht ab

    Ich habe aber ka woran das liegt und noch ne frage wie kann ich dann diesen Text mit einer anderen Textfarbe versehen

    ich benutze die GUIRichEdit udf von progandy

    Ich hoffe jemand kann mir weiterhelfen

    Einmal editiert, zuletzt von simon (25. Oktober 2009 um 12:28)

  • nein es liegt an _GUIRichEdit_FindTextEx , da wennich es rausnehme es läuft und anders wenn ich es aufrufe also <?php eingebe kommt eine windows fehlermeldung das autoitv3 Script nicht mehr funktioniert

  • Hat denn keiner eine Lösung ?
    gibt es denn sonst eien lößug die positionen eines strings in einem text herauszubekommen

  • So:

    [autoit]


    $aFound = _GUICtrlRichEdit_FindTextEx($hRichEdit,"<?php",0,-1,1)

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

    $aSel = _GUICtrlRichEdit_GetSel($hRichEdit)
    _GUICtrlRichEdit_SetSel($hRichEdit, $aFound[0], $aFound[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit, $Color)
    _GUICtrlRichEdit_SetSel($hRichEdit, $aSel[0], $aSel[1])

    [/autoit]
  • Danke es wird jetzt farbig allerdings wenn ich in dieser zeile weiterschreibe wird es auch farbit und nciht wieder standard also schwarz

  • Mit

    [autoit]

    $aSel = _GUICtrlRichEdit_GetSel($hRichEdit)
    _GUICtrlRichEdit_SetSel($hRichEdit, $hPost[0], $hPost[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit, $Color)
    _GUICtrlRichEdit_SetSel($hRichEdit, $aSel[0], $aSel[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit,0x000000)

    [/autoit]

    geht es aber nur einmal im ganzen edit feld ich will aber jedem "<?php" eine Farbe geben und nciht nur dem ersten

  • Ja aber SciLexer ist doch nur für autoit highlighting aber ich will für meinen php highligter andere codes highlighten und andere farben ....
    wenn er fertig ist poste ich ihn hier auch aber erst mus das highlighten gehen
    :P

  • aha cool
    wo findet man die plugins.au3 da ich die nicht finde auf meinem pc auch nicht im include verzeichniss von autoit

  • aha cool
    wo findet man die plugins.au3 da ich die nicht finde auf meinem pc auch nicht im include verzeichniss von autoit


    das Beispiel ist nicht vollständig ... geht also nicht. Die UDF funktioniert aber.

    und noch mal zum Originalen Thema: einfach das Ende der letzten Suche als Start angeben und du findest die nächste Stelle ;)

  • kannst du mir mal da ein bsp machen da ich nciht verstehe wie oft ich das durchsuchen soll, also wie oft etwas enthalten ist ???

    Edit: warum werden hierbei nicht ale variablen farbig:

    [autoit]

    #include <_SciLexer.au3>

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

    $hGUI = GUICreate("",1000,650)
    $hSci = Sci_CreateEditor(WinGetHandle($hGUI),0,0,1000,650)
    GUISETSTATE()
    Sci_StyleSet($hSci,7, 0x0000bc, 0xFFFFFF, 1, 0, 0)
    While 1
    Switch GUIGETMSG()
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Einmal editiert, zuletzt von simon (24. Oktober 2009 um 21:25)

  • Hab mir jetzt ne function dafür gemacht die funktioniert

    Spoiler anzeigen
    [autoit]

    Func _GUICtrlRichEdit_HighlightText($iKey,$Color)
    $hTxt = _GUICtrlRichEdit_GetText($hRichEdit)
    If StringInStr($hTxt,$iKey) Then
    $hTextLength = _GUICtrlRichEdit_GetTextLength($hRichEdit,True)
    $hPost = _GUICtrlRichEdit_FindTextEx($hRichEdit,$iKey,0,-1,1)
    $aSel = _GUICtrlRichEdit_GetSel($hRichEdit)
    _GUICtrlRichEdit_SetSel($hRichEdit, $hPost[0], $hPost[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit, $Color)
    _GUICtrlRichEdit_SetSel($hRichEdit, $aSel[0], $aSel[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit,0x000000)
    For $i = 1 To $hTextLength STep + 1
    If Not IsArray($hPost) Then
    Exitloop
    Endif
    $hPost = _GUICtrlRichEdit_FindTextEx($hRichEdit,$iKey,$hPost[1],-1,1)
    If IsArray($hPost) Then
    $aSelection = _GUICtrlRichEdit_GetSel($hRichEdit)
    _GUICtrlRichEdit_SetSel($hRichEdit,$hPost[0],$hPost[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit,$Color)
    _GUICtrlRichEdit_SetSel($hRichEdit,$aSelection[0],$aSelection[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit,0x000000)
    Endif
    Next
    Endif
    EndFUnc

    [/autoit]

    wie kann man herausfinden wie oft ein stringbetween enthalten ist
    zweck:
    Ich will herausfinden wie viele Strings in einem string enthalten ist
    ich will nähmlich alle "..." highlighten mit meiner funktion dazu brauch ich eine for schleife und brauch die anzahl , wie oft er enthalten ist

  • Warum willst du das denn wissen? FindTextEx gibt -1 zurück, wenn nichts mehr gefunden wird ;)

    Spoiler anzeigen
    [autoit]

    Func _GUICtrlRichEdit_HighlightText($sKey,$Color)
    Local $iLen = StringLen($sKey), $iSearchPos = 0
    Local $aSel = _GUICtrlRichEdit_GetSel($hRichEdit)
    $iPos = _GUICtrlRichEdit_FindTextEx($hRichEdit,$sKey,$iSearchPos,-1)
    While $iPos <> -1
    _GUICtrlRichEdit_SetSel($hRichEdit, $iPos, $iPos+$iLen)
    _GUICtrlRichEdit_SetFontColor($hRichEdit, $Color)
    $iSearchPos += $iPos + $iLen
    $iPos = _GUICtrlRichEdit_FindTextEx($hRichEdit,$sKey,$iSearchPos,-1)
    WEnd
    _GUICtrlRichEdit_SetSel($hRichEdit, $aSel[0], $aSel[1])
    _GUICtrlRichEdit_SetFontColor($hRichEdit,0x000000)
    EndFUnc

    [/autoit]
  • Noch ein problemm ich will alle von "..." highlighten aber mit stringbetween geht es iwie gar nicht

    [autoit]

    _GUICtrlRichEdit_HighlightText(_StringBetween($hTxt,'"','"'),0xCDAD00)

    [/autoit]
  • Ist auch nicht so einfach ;) Du musst nach dem ersten Zeichen suchen und dann die Position merken, nach dem zweiten suchen und dann alles dazwischen einfärben.

    Ich hab jetzt aber mal das Beispiel für SciLexer gemacht:

    Spoiler anzeigen
    [autoit]

    #include"GUIConstantsEx.au3"
    #include"WindowsConstants.au3"
    #include"_SciLExer.au3"

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

    $hGUI = GUICreate("test", 500, 400)
    $hLexer = SCI_CreateEditor($hGUI, 0, 0, 500, 400)

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

    SendMessage($hLexer, $SCI_SETLEXER, $SCLEX_HTML, 0)

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

    $bits = SendMessage($hLexer, $SCI_GETSTYLEBITSNEEDED, 0, 0)
    SendMessage($hLexer, $SCI_SETSTYLEBITS, $bits, 0)

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

    SendMessage($hLexer, $SCI_SETTABWIDTH, 4, 0)
    SendMessage($hLexer, $SCI_SETINDENTATIONGUIDES, True, 0)

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

    Global $Keywords_PHP = "and array as bool boolean break case cfunction class const continue declare " & _
    "default die directory do double echo else elseif empty enddeclare endfor " & _
    "endforeach endif endswitch endwhile eval exit extends false float for " & _
    "foreach function global if include include_once int integer isset list new " & _
    "null object old_function or parent print real require require_once resource " & _
    "return static stdclass string switch true unset use var while xor " & _
    "abstract catch clone exception final implements interface php_user_filter " & _
    "private protected public this throw try " & _
    "__class__ __file__ __function__ __line__ __method__ __sleep __wakeup"

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

    SendMessageString($hLexer, $SCI_SETKEYWORDS, 5, $Keywords_PHP)

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

    SetStyle($hLexer, $SCE_H_DEFAULT, 0x000000, 0xFFFFFF, 12, 'Arial')
    SetStyle($hLexer, $SCE_H_TAG, 0x000080, 0xFFFFFF)
    SetStyle($hLexer, $SCE_H_TAGUNKNOWN, 0xFF0000, 0xFFFFFF)
    SetStyle($hLexer, $SCE_H_ATTRIBUTE, 0x008080, 0xFFFFFF)
    SetStyle($hLexer, $SCE_H_ATTRIBUTEUNKNOWN, 0xFF0000, 0xFFFFFF)
    SetStyle($hLexer, $SCE_H_NUMBER, 0xA900AC, 0xFFFFFF)
    SetStyle($hLexer, $SCE_H_DOUBLESTRING, 0xCC9999, 0xFFFFFF)
    SetStyle($hLexer, $SCE_H_SINGLESTRING, 0xCC9999, 0xFFFFFF)
    SetStyle($hLexer, $SCE_H_OTHER, 0x800080, 0xFFFFFF)

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

    SetStyle($hLexer, $SCE_H_QUESTION, 0x0000FF, 0xFFEFBF)
    SetStyle($hLexer, $SCE_HPHP_COMPLEX_VARIABLE, 0x007F00, 0xFFF8F8, 0, '', 0, 1)
    SetStyle($hLexer, $SCE_HPHP_DEFAULT, 0x000033, 0xFFF8F8)
    SendMessage($hLexer, $SCI_STYLESETEOLFILLED, $SCE_HPHP_DEFAULT, 1)

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

    SetStyle($hLexer, $SCE_HPHP_HSTRING, 0x007F00, 0xFFF8F8)
    SetStyle($hLexer, $SCE_HPHP_SIMPLESTRING, 0x009F00, 0xFFF8F8)
    SetStyle($hLexer, $SCE_HPHP_WORD, 0x7F007F, 0xFFF8F8, 0, '', 0, 1)
    SetStyle($hLexer, $SCE_HPHP_NUMBER, 0xCC9900, 0xFFF8F8)
    SetStyle($hLexer, $SCE_HPHP_VARIABLE, 0x00007F, 0xFFF8F8, 0, '', 0, 1)
    SetStyle($hLexer, $SCE_HPHP_COMMENT, 0x999999, 0xFFF8F8)
    SetStyle($hLexer, $SCE_HPHP_COMMENTLINE, 0x666666, 0xFFF8F8, 0, '', 0, 1)
    SetStyle($hLexer, $SCE_HPHP_HSTRING_VARIABLE, 0x007F00, 0xFFF8F8, 0, '', 0, 1)
    SetStyle($hLexer, $SCE_HPHP_OPERATOR, 0x000000, 0xFFF8F8, 0, '', 1)

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

    GUISetState()

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

    While 1
    If GUIGetMsg() = -3 Then Exit
    WEnd

    [/autoit]
  • Boa cool ich nehm doch sci lexer :)

    warum ist es bie <?php immer grün hinterlegt und nicht nur farbige schrift?