Hallo,
Ich habe ein Problem mit der Färbung von "nachfolgendem Text" in einer GUICtrlRichEdit. Sprich ich möchte der Richedit sagen, dass der Text, der nun per _GUICtrlRichEdit_AppendText() angehängt wird, eine bestimmte Farbe haben soll.
Wenn ich Text markiere, und Färbe funktioniert es alles wunderbar. (Siehe mittlere RichEdit). Ich möchte es allerdings festlegen, ohne Text zu markeiren. Die wichtigen Zeilen sind 55-65. Kann mir einer sagen wo mein Fehler liegt?
Zum Testen Bitte "M\w+r" (Ohne Anführungszeichen) in die obere RichEdit eingeben.
Spoiler anzeigen
#include <Array.au3>
#include <GuiRichEdit.au3>
#include <WindowsConstants.au3>
Global $bYellow ; If False, use Blue as next Color
Global $sIniPath = @AppDataDir & "\RegExpIt\Settings.ini"
;~ If Not FileExists($sIniPath) Then ; Ini neu schreiben.
;~ IniWrite($sIniPath, "Genral Settings", "Resolution", "800x600")
;~ EndIf
$aGUIRes = StringSplit(IniRead($sIniPath, "General Settings", "Resolution", "800x600"), "x", 2)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("RegExpIt", $aGUIRes[0], $aGUIRes[1], -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetFont(12)
$hRE_RegExp = _GUICtrlRichEdit_Create($hGUI, "", 10, 10, 445, 120, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_SetFont($hRE_RegExp, 12)
GUICtrlCreateLabel("Zukünftige Symbolleiste", 10, 140, 780, 20, 0x01)
GUICtrlSetBkColor(-1, 0x00FFAA)
$hRE_TestString = _GUICtrlRichEdit_Create($hGUI, "Mayer, Meier, Peters, Maier, Meyer, Rudolfs", 10, 170, 780, 200)
_GUICtrlRichEdit_SetFont($hRE_TestString, 12)
$hRE_Matches = _GUICtrlRichEdit_Create($hGUI, "", 10, 390, 780, 200)
_GUICtrlRichEdit_SetFont($hRE_Matches, 15)
GUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
GUIDelete($hGUI) ;GUI löschen, wegen RichEdit.
Exit
EndSwitch
_RichEdit_ApplyRegExp()
WEnd
Func _RichEdit_ApplyRegExp()
If _GUICtrlRichEdit_IsModified($hRE_RegExp) Then
;~ ConsoleWrite(_RichEdit_GetText($hRE_RegExp) & @TAB & @error & @TAB & @extended & @CRLF)
_GUICtrlRichEdit_SetModified($hRE_RegExp, False)
$aTmp = StringRegExp(_RichEdit_GetText($hRE_TestString), _RichEdit_GetText($hRE_RegExp), 3)
If Not @error Then
[/autoit] [autoit][/autoit] [autoit]_GUICtrlRichEdit_SetText($hRE_Matches, "")
Global $bYellow = True
Local $iPos = 0
$aSel = _GUICtrlRichEdit_GetSel($hRE_RegExp) ; Get curren Cursor Pos.
_GUICtrlRichEdit_SetCharBkColor($hRE_Matches, 0x80C0FF)
;Append text in Matches-RichEdit.
For $i = 0 To UBound($aTmp) - 1
If Not $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRE_Matches, 0x80C0FF)
If $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRE_Matches, 0xFFF000)
_GUICtrlRichEdit_AppendText($hRE_Matches, $aTmp[$i] & @CRLF)
[/autoit] [autoit][/autoit] [autoit]$iPos += StringLen($aTmp[$i])
$bYellow = Not $bYellow
ConsoleWrite($bYellow &@TAB & $iPos & @CRLF)
ConsoleWrite(_GUICtrlRichEdit_GetCharBkColor($hRE_Matches) & @CRLF)
Next
;Clear BKColor for middle-richedit
_GUICtrlRichEdit_SetSel($hRE_TestString, 0, -1, True)
_GUICtrlRichEdit_SetCharBkColor($hRE_TestString, 0xFFFFFF)
If _RichEdit_GetText($hRE_RegExp) <> "" Then
Local $sText = _RichEdit_GetText($hRE_TestString), $iCounter = 0
Global $bYellow = True
; Append color in middle-richedit
For $i = 0 To UBound($aTmp) - 1
$bYellow = Not $bYellow
Local $iPos = StringInStr($sText, $aTmp[$i], 1) - 1
_GUICtrlRichEdit_SetSel($hRE_TestString, $iPos + $iCounter, $iPos + $iCounter + StringLen($aTmp[$i]), True)
If $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRE_TestString, 0xFFF000)
If Not $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRE_TestString, 0x80C0FF)
_GUICtrlRichEdit_Deselect($hRE_TestString)
$sText = StringTrimLeft($sText, $iPos + 1)
$iCounter += $iPos + 1
Next
EndIf
_GUICtrlRichEdit_SetSel($hRE_RegExp, $aSel[0], $aSel[1]) ;restore Cursor Pos
Else
_GUICtrlRichEdit_SetText($hRE_Matches, "")
EndIf
EndIf
EndFunc ;==>_RichEdit_ApplyRegExp
Func _RichEdit_GetText($hRichEdit)
;SEuBo
$aPos = _GUICtrlRichEdit_GetSel($hRichEdit)
_GUICtrlRichEdit_AppendText($hRichEdit, " ")
$sRet = StringReplace(_GUICtrlRichEdit_GetText($hRichEdit, True), @CR & " ", @CR)
_GUICtrlRichEdit_SetText($hRichEdit, $sRet)
;~ _GUICtrlRichEdit_GotoCharPos($hRichEdit, StringLen($sRet))
_GUICtrlRichEdit_SetSel($hRichEdit, $aPos[0], $aPos[1])
Return $sRet
EndFunc ;==>_RichEdit_GetText
Gelöst:
Spoiler anzeigen
#include <Array.au3>
#include <GuiRichEdit.au3>
#include <WindowsConstants.au3>
Global $bYellow ; If False, use Blue as next Color
Global $sIniPath = @AppDataDir & "\RegExpIt\Settings.ini"
;~ If Not FileExists($sIniPath) Then ; Ini neu schreiben.
;~ IniWrite($sIniPath, "Genral Settings", "Resolution", "800x600")
;~ EndIf
$aGUIRes = StringSplit(IniRead($sIniPath, "General Settings", "Resolution", "800x600"), "x", 2)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("RegExpIt", $aGUIRes[0], $aGUIRes[1], -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetFont(12)
$hRE_RegExp = _GUICtrlRichEdit_Create($hGUI, "", 10, 10, 445, 120, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
_GUICtrlRichEdit_SetFont($hRE_RegExp, 12)
GUICtrlCreateLabel("Zukünftige Symbolleiste", 10, 140, 780, 20, 0x01)
GUICtrlSetBkColor(-1, 0x00FFAA)
$hRE_TestString = _GUICtrlRichEdit_Create($hGUI, "Mayer, Meier, Peters, Maier, Meyer, Rudolfs", 10, 170, 780, 200)
_GUICtrlRichEdit_SetFont($hRE_TestString, 12)
$hRE_Matches = _GUICtrlRichEdit_Create($hGUI, "", 10, 390, 780, 200)
_GUICtrlRichEdit_SetFont($hRE_Matches, 15)
GUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
GUIDelete($hGUI) ;GUI löschen, wegen RichEdit.
Exit
EndSwitch
_RichEdit_ApplyRegExp($hRE_TestString)
_RichEdit_ApplyRegExp($hRE_RegExp)
WEnd
Func _RichEdit_ApplyRegExp(ByRef $hRichEdit)
If _GUICtrlRichEdit_IsModified($hRichEdit) Then
_GUICtrlRichEdit_SetModified($hRichEdit, False)
$aTmp = StringRegExp(_RichEdit_GetText($hRE_TestString), _RichEdit_GetText($hRE_RegExp), 3)
If Not @error Then
_GUICtrlRichEdit_SetText($hRE_Matches, _ArrayToString($aTmp, @CRLF))
Global $bYellow = True
$aSel = _GUICtrlRichEdit_GetSel($hRichEdit) ; Get curren Cursor Pos.
__RichEdit_ColorViaRegExp($hRE_Matches)
__RichEdit_ColorViaRegExp($hRE_TestString)
_GUICtrlRichEdit_SetSel($hRichEdit, $aSel[0], $aSel[1]) ;restore Cursor Pos
Else
_GUICtrlRichEdit_SetText($hRE_Matches, "")
EndIf
EndIf
EndFunc ;==>_RichEdit_ApplyRegExp
Func _RichEdit_GetText($hRichEdit)
;SEuBo
$aPos = _GUICtrlRichEdit_GetSel($hRichEdit)
_GUICtrlRichEdit_AppendText($hRichEdit, " ")
$sRet = StringReplace(_GUICtrlRichEdit_GetText($hRichEdit, True), @CR & " ", @CR)
_GUICtrlRichEdit_SetText($hRichEdit, $sRet)
_GUICtrlRichEdit_SetSel($hRichEdit, $aPos[0], $aPos[1])
_GUICtrlRichEdit_SetModified($hRichEdit, False)
Return $sRet
EndFunc ;==>_RichEdit_GetText
Func __RichEdit_ColorViaRegExp($hRichEdit)
$aTmp = StringRegExp(_RichEdit_GetText($hRE_TestString), _RichEdit_GetText($hRE_RegExp), 3)
_GUICtrlRichEdit_SetSel($hRichEdit, 0, -1, True)
_GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0xFFFFFF)
If _RichEdit_GetText($hRE_RegExp) <> "" Then
Local $sText = _RichEdit_GetText($hRichEdit), $iCounter = 0
Global $bYellow = True
For $i = 0 To UBound($aTmp) - 1
$bYellow = Not $bYellow
Local $iPos = StringInStr($sText, $aTmp[$i], 1) - 1
_GUICtrlRichEdit_SetSel($hRichEdit, $iPos + $iCounter, $iPos + $iCounter + StringLen($aTmp[$i]), True)
If $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0xFFF000)
If Not $bYellow Then _GUICtrlRichEdit_SetCharBkColor($hRichEdit, 0x80C0FF)
$sText = StringTrimLeft($sText, $iPos + 1)
$iCounter += $iPos + ($hRichEdit <> $hRE_Matches)
Next
EndIf
_GUICtrlRichEdit_SetModified($hRichEdit, False)
EndFunc ;==>__RichEdit_ColorViaRegExp