_guictrlrichedit text färben

  • Hi

    versuchs mal so:

    Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <EditConstants.au3>
    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Main()

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

    Func Main()
    Local $hGui, $hRichEdit, $hButton, $iMsg

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

    $hGui = GUICreate("Beispiel", 320, 350, -1, -1)
    $hButton = GUICtrlCreateButton("Wörter färben", 10, 10, 105, 33, 0)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "This is a test.", 10, 50, 300, 220, _
    BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    _GUICtrlRichEdit_AppendText($hRichEdit, @CR & "This is more text.")
    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    Case $iMsg = $hButton
    _GUICtrlRichEdit_SetSel($hRichEdit, 0, 5) ; Select
    _GuiCtrlRichEdit_SetCharColor($hRichEdit, 255) ; Text Color
    _GUICtrlRichEdit_SetSel($hRichEdit, 10, 15) ; Select
    _GuiCtrlRichEdit_SetCharColor($hRichEdit, 255) ; Text Color
    _GUICtrlRichEdit_SetSel($hRichEdit, 29, 35) ; Select
    _GuiCtrlRichEdit_SetCharColor($hRichEdit, 255) ; Text Color
    _GUICtrlRichEdit_SetSel($hRichEdit, -1, -1) ; Deselect
    EndSelect
    WEnd
    EndFunc ;==>Main

    [/autoit]

    MfG ThPfund

    "Es könnte alles so einfach sein..."

  • und wie kann man immer die unterste linie färben ???

    also ich hab mir gedacht, das es so gehen müsste:


    [autoit]

    For $i = 0 To _GUICtrlRichEdit_GetLineCount($Edit1)
    $char += _GUICtrlRichEdit_GetLineLength($Edit1, $i)
    Next
    _GUICtrlRichEdit_SetSel($Edit1, $char + 1, _GUICtrlRichEdit_GetLineLength($edit1,_GUICtrlRichEdit_GetLineCount($edit1))+$char)
    _GUICtrlRichEdit_SetCharColor($Edit1, 0x008000)
    _GUICtrlRichEdit_Deselect($Edit1)

    [/autoit]


    sry syntax highlighting funktioniert bei mir nich
    tuts aber nicht 8|

    Edit BugFix: Hab dir mal die Tags gesetzt.

  • Hallo Scripter192,

    ich habe es in das Beispiel von ThPfund eingebaut:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <EditConstants.au3>
    #include <GuiRichEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Main()

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

    Func Main()
    Local $hGui, $hRichEdit, $hButton, $iMsg, $startSel, $endSel

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

    $hGui = GUICreate("Beispiel", 320, 350, -1, -1)
    $hButton = GUICtrlCreateButton("Wörter färben", 10, 10, 105, 33, 0)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "This is a test.", 10, 50, 300, 220, _
    BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    _GUICtrlRichEdit_AppendText($hRichEdit, @CR & "This is more text."& @CR & "This is teh end of text.")
    GUISetState()

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

    While True
    $iMsg = GUIGetMsg()
    Select
    Case $iMsg = $GUI_EVENT_CLOSE
    GUIDelete()
    Exit
    Case $iMsg = $hButton
    _GUICtrlRichEdit_SetSel($hRichEdit, 0, 5) ; Select
    _GuiCtrlRichEdit_SetCharColor($hRichEdit, 255) ; Text Color
    _GUICtrlRichEdit_SetSel($hRichEdit, 10, 15) ; Select
    _GuiCtrlRichEdit_SetCharColor($hRichEdit, 255) ; Text Color
    _GUICtrlRichEdit_SetSel($hRichEdit, 29, 35) ; Select
    _GuiCtrlRichEdit_SetCharColor($hRichEdit, 255) ; Text Color
    $startSel = _GuiCtrlRichEdit_GetFirstCharPosOnLine($hRichEdit,_GUICtrlRichEdit_GetLineCount($hRichEdit))
    $endSel = $startSel + _GUICtrlRichEdit_GetLineLength($hRichEdit,_GUICtrlRichEdit_GetLineCount($hRichEdit))
    _GUICtrlRichEdit_SetSel($hRichEdit, $startSel, $endSel) ; Select
    _GuiCtrlRichEdit_SetCharColor($hRichEdit, 255) ; Text Color
    _GUICtrlRichEdit_SetSel($hRichEdit, -1, -1) ; Deselect
    EndSelect
    WEnd
    EndFunc ;==>Main

    [/autoit]

    (Aufwand: 5 Minuten mit funcs in Hilfe suchen)

    mfg (Auto)Bert

  • Hmm ... hab das vorhin auch mal versucht. Dürfte auch funktionieren.

    Spoiler anzeigen
    [autoit]

    Case $iMsg = $hButton
    $i = 0
    For $i = 0 To _GUICtrlRichEdit_GetLineCount($Edit1) Step 1
    $j += _GUICtrlRichEdit_GetLineLength($Edit1, $i)
    Next
    $k = $j - _GUICtrlRichEdit_GetLineLength($Edit1, _GUICtrlRichEdit_GetLineCount($Edit1))
    $l = _GUICtrlRichEdit_SetSel($Edit1, $k + _GUICtrlRichEdit_GetLineCount($Edit1)-1, -1)
    _GUICtrlRichEdit_SetCharColor($Edit1, 0x008000)
    _GUICtrlRichEdit_Deselect($Edit1)

    [/autoit]


    AutoBert's Variante gefällt allerdings mehr.

  • Weil du in $char die Gesammtanzahl der Zeichen hast.
    _SetSelect geht aber nicht von Zeichen sondern von Courserpositionen aus. Jede Zeile hat jeweils Zeichen+1 Cursorpositionen. Wenn du also ab Anfang von Zeile 5 markieren willst dann wäre die Cursorposition=Gesammtanzahl_der_Zeichen - Zeichen_der_letzten_Zeile + 4.
    +4 weil alle vorangegangenen Zeilen jeweils eine Cursorposition mehr haben als Zeichen.

  • Hallo scripter192,

    laut Beispiel in der Hilfe zu _ChooseColor ist die Farbe für den Wert 0x808000 in BGR ein Türkis-Blau und in RGB ein oliv. Hier einmal das Beispiel:

    Spoiler anzeigen
    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    Opt('MustDeclareVars', 1)

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

    _Color_Example()

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

    Func _Color_Example()
    Local $GUI, $Btn_COLORREF, $Btn_BGR, $Btn_RGB, $iMemo

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

    $GUI = GUICreate("_ChooseColor() Beispiel", 400, 300)
    $iMemo = GUICtrlCreateEdit("", 2, 55, 396, 200, BitOR($WS_VSCROLL, $WS_HSCROLL))
    GUICtrlSetFont($iMemo, 10, 400, 0, "Courier New")
    $Btn_COLORREF = GUICtrlCreateButton("COLORREF", 70, 10, 80, 40)
    $Btn_BGR = GUICtrlCreateButton("BGR", 160, 10, 80, 40)
    $Btn_RGB = GUICtrlCreateButton("RGB", 250, 10, 80, 40)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $Btn_COLORREF
    _ShowChoice($GUI, $iMemo, 0, _ChooseColor(0, 255, 0, $GUI), "Gewählte COLORREF-Farbe: ")
    Case $Btn_BGR
    _ShowChoice($GUI, $iMemo, 1, _ChooseColor(2, 0x808000, 1, $GUI), "Gewählte BGR-Farbe: ")
    Case $Btn_RGB
    _ShowChoice($GUI, $iMemo, 2, _ChooseColor(2, 0x0080C0, 2, $GUI), "Gewählte RGB-Farbe: ")
    EndSwitch
    WEnd
    EndFunc ;==>_Color_Example

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

    Func _ShowChoice($GUI, $iMemo, $Type, $Choose, $sMessage)
    Local $cr
    If $Choose <> -1 Then

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

    If $Type = 0 Then ; Konvertiere COLORREF in RGB für dieses Beispiel
    $cr = Hex($Choose, 6)
    GUISetBkColor('0x' & StringMid($cr, 5, 2) & StringMid($cr, 3, 2) & StringMid($cr, 1, 2), $GUI)
    Else
    GUISetBkColor($Choose, $GUI)
    EndIf

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

    GUICtrlSetData($iMemo, $sMessage & $Choose & @CRLF, 1)

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

    Else
    GUICtrlSetData($iMemo, "Farbauswahl vom Benutzer abgebrochen!" & @CRLF, 1)
    EndIf
    EndFunc ;==>_ShowChoice

    [/autoit]

    wenn du in _GuiCtrlRichEdit_SetCharColor die Farben verwendest die unter ColorRef zurückgegeben werden hast du den richtigen Wert also:

    [autoit]

    _GuiCtrlRichEdit_SetCharColor($hRichEdit,"32896")

    [/autoit]

    mfg (Auto)Bert

    2 Mal editiert, zuletzt von AutoBert (27. Januar 2010 um 20:28)