Eigene Syntax Highlighting

  • Hallo Ihr Lieben,

    ich würde gerne ein kleines Script schreiben, in dem ein Inputfeld vorhanden ist, welches vorher definierte Wörter farblich hervorhebt.
    Soweit ich weis gibt es aber keine Möglichkeit einzelne Wörter zu formatieren sondern nur der gesamte Text, wie mit z.B. Guictrlfont...

    Wie kann ich mein Vorhaben umsetzten ? GDI ?

    Danke für Ideen :)

    Tim

  • Hey, das ist ja super. Habe mich eben ein wenig damit befasst.
    Das Problem das ich habe, das die meisten Funktionen auf Markierungen reagieren. Gibt es die Möglichkeit, die Markierungen zu umgehen ?

    Ich habe hier einmal ein Code Beispiel geschrieben, dass mir das Wort 'test' blau einfärben soll.
    Würde mich freuen wenn ihr mir einen Tipp geben könntet:

    [autoit]

    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $hGui = GUICreate("HL", 700, 500, -1, -1)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "", 10, 10, 680, 400, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    _GUICtrlRichEdit_Destroy($hRichEdit) ; needed unless script crashes
    Exit

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

    EndSelect

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

    $suchwort = "test"
    $inhalt = _GUICtrlRichEdit_GetText($hRichEdit) ;Inhalt auslesen
    $position = StringInStr($inhalt,$suchwort) ;das Suchwort suchen

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

    ;~ MsgBox(0,"",$position)
    if $position > 0 then ;wenn ein Suchwort gefunden ist
    _GUICtrlRichEdit_SetSel($hRichEdit, $position-1, StringLen($suchwort)+$position-1) ;das Wort markieren
    _GUICtrlRichEdit_SetCharColor($hRichEdit, 0xFF0000) ;die Farbe verändern
    _GUICtrlRichEdit_Deselect($hRichEdit) ; die Markierung aufheben
    EndIf

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

    WEnd

    [/autoit]
  • Habs mal so gemacht :

    Spoiler anzeigen
    [autoit]

    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <RichEditConstants.au3>

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

    global $SuchWorte[2][2]=[["test",0xFF0000],["anders",0x0000FF]]
    global $NoEvent
    $hGui = GUICreate("HL", 700, 500, -1, -1)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "", 10, 10, 680, 400, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    GUISetState()

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

    While Sleep(10)
    $iMsg = GUIGetMsg()
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    _GUICtrlRichEdit_Destroy($hRichEdit) ; needed unless script crashes
    Exit
    EndSelect
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nNotifyCode = _HiWord($wParam)
    Local $nID = _LoWord($wParam)
    ; Local $hCtrl = $lParam
    ;ConsoleWrite("Before:"&$nNotifyCode&@crlf)
    if $NoEvent then
    $NoEvent=false
    Return $GUI_RUNDEFMSG
    endif
    ;ConsoleWrite($nNotifyCode&@crlf)
    Switch $lParam
    Case $hRichEdit
    Switch $nNotifyCode
    Case 1024
    ConsoleWrite("Changed"&@crlf)
    $Pos=_GUICtrlRichEdit_GetSel($hRichEdit)
    $text=_GUICtrlRichEdit_GetTextInRange($hRichEdit,0, $Pos[1])
    for $i=0 to UBound($SuchWorte)-1 step 1
    $position=1
    $first=true
    while $position<>0
    $tmp=$position
    if NOT $first then
    $tmp=$position+StringLen($SuchWorte[$i][0])
    endif
    $position = StringInStr($text, $SuchWorte[$i][0],0,1,$tmp) ;das Suchwort suchen
    if $position>0 then
    _GUICtrlRichEdit_SetSel($hRichEdit, $position - 1, StringLen($SuchWorte[$i][0]) + $position - 1) ;das Wort markieren
    _GUICtrlRichEdit_SetCharColor($hRichEdit, $SuchWorte[$i][1]) ;die Farbe verändern
    ConsoleWrite("Color: "&$position - 1&":"&StringLen($SuchWorte[$i][0]) + $position - 1&@crlf)
    $first=false
    endif
    WEnd
    next
    ConsoleWrite($pos[0]&":"&$pos[1]&@crlf)
    _GUICtrlRichEdit_SetSel($hRichEdit,$pos[0],$pos[1]); Markierung rückgängig
    $NoEvent=true
    ;_GUICtrlRichEdit_SetCharColor($hRichEdit, 0x000000) ;die Farbe verändern
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

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

    Func _HiWord($x)
    Return BitShift($x, 16)
    EndFunc ;==>_HiWord
    Func _LoWord($x)
    Return BitAND($x, 0xFFFF)
    EndFunc ;==>_LoWord

    [/autoit]


    Das einzige Problem:
    Beim weiterschreiben bleibt die Farbe erhalten. Mein versuch (Zeile 59) sorgt dafür, dass alles wieder schwarz wird -.-

    Kannst ja selbst mal probieren. Vllt fällt auch wem anders noch eine Lösung ein.

    MfG Kanashius

    • Offizieller Beitrag

    Schau dir mal diesen Thread aus dem EN-Forum an : http://www.autoitscript.com/forum/topic/12…d-12252013/?hl= richedit