Richedit verschieben + Textfarbe

  • Hey... Ich will im Prinzip "nur" ein RichEdit verschieben... hab alle UDF (zB von progandy) durchforstest aber keine UDF für dieses Vorhaben gefunden...
    Und keine Sorge... GuiCtrlSetPos hab ich auch schon längst versucht:

    Spoiler anzeigen
    [autoit]

    #include <GuiRichEdit.au3>
    #include <GUIConstants.au3>

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

    Local $hGui, $hRichEdit, $iMsg
    $hGui = GUICreate("Rich Edit Example", 500, 450, -1, -1)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, "This is a test", 10, 10, 480, 200, _
    BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    GUISetState()

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

    sleep(2000)

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

    For $i = 10 To 200 Step 10
    GuiCtrlSetPos($hRichEdit, 10, $i)
    Next
    ;~ MsgBox(0,"New Y-Pos:" & ControlGetPos("","", $hRichEdit)

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

    sleep(1000)

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

    Exit

    [/autoit]

    Außerdem wollte ich fragen ob schon jemand einen Weg gefunden hat die Farbe vom Text in einer Richedit zu verändern (Glaube gab da mal n bug oder so)..

    lG, Chaoskeks ^^

    Einmal editiert, zuletzt von ChaosKeks (10. April 2009 um 18:00)

  • Schnelle Lösung, schlechter Weg:

    [autoit]

    ControlMove("[CLASS:AutoIt v3 GUI]", '',"[CLASS:RICHEDIT50W; INSTANCE:1]", 10, $i, 480, 200)
    statt
    GuiCtrlSetPos($hRichEdit, 10, $i)

    [/autoit]

    progandy kann Dir sicher weiter helfen

  • WinMove ist meiner Meinung nach die beste Lösung. Außerdem gibt es keine Text-Parameter beim Erzeugen der Box.

    Spoiler anzeigen
    [autoit]

    #include <GuiRichEdit.au3>
    #include <GUIConstants.au3>

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

    Local $hGui, $hRichEdit, $iMsg
    $hGui = GUICreate("Rich Edit Example", 500, 450)
    $hRichEdit = _GUICtrlRichEdit_Create($hGui, 10, 10, 480, 200, _
    BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL,$WS_VISIBLE))
    GUISetState()

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

    sleep(2000)

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

    For $i = 10 To 200 Step 10
    WinMove($hRichEdit,"", 10, $i)
    Sleep(10)
    Next
    ;~ MsgBox(0,"New Y-Pos:" & ControlGetPos("","", $hRichEdit)

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

    sleep(1000)

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

    Exit

    [/autoit]

    Und für die Farbe sind doch auch Funktionen in der UDF dabei.

  • Jippie klappt supper :thumbup: Vielen dank euch beiden!!

    Ahja und bei mir klappts wirklich >nur< mit Textparameter ansonsten kommt bei mir ne Fehlermeldung...

    Ups hatte deinen letzten Satz überlesen... ne die Farbfunktionen gehen nich!

    Einmal editiert, zuletzt von ChaosKeks (9. April 2009 um 23:24)

  • Ach so, du nimmst gar nicht meine UDFs, sondern die hier: http://www.autoitscript.com/forum/index.php?showtopic=89358&hl= stimmts?
    Die verstehe ich auch nicht so ganz ;) Aber die Farbe solltest du so setzen können (mit $iSelec auf False)

    Spoiler anzeigen
    [autoit]

    ;====================================================================================================
    ; Function Name: _GUICtrlRichEdit_SetFontColor
    ; Description: Select the text color
    ; Parameters : $hWnd - Handle to the control
    ; $hColor - Color value (BGR)
    ; $iSelect - Color entire text or selection (default)
    ; Return values : True on success, otherwise False
    ; Author : Yoan Roblet (Arcker)
    ; Rewritten : grham
    ; Notes :
    ;====================================================================================================
    ;
    Func _GUICtrlRichEdit_SetFontColor($hWnd, $hColor, $iSelec = True)
    Local $tcharformat = DllStructCreate($tagCHARFORMAT2)
    DllStructSetData($tcharformat, 1, DllStructGetSize($tcharformat))
    DllStructSetData($tcharformat, 2, $CFM_COLOR)
    DllStructSetData($tcharformat, 6, $hColor)
    Local $iSelec2 = $SCF_ALL
    If $iSelec Then $iSelec2 = $SCF_SELECTION
    Return _SendMessage($hWnd, $EM_SETCHARFORMAT, $iSelec2, DllStructGetPtr($tcharformat))
    EndFunc ;==>_GUICtrlRichEdit_SetFontColor

    [/autoit]
  • Hmm thx das geht auf jeden Fall in die richtige Richtung... Aber ich schaffs höchstens den Text mehr und weniger >rot< zu bekommen... wie krieg ich grün hin? :D Die richtigen RGB-Werte hab ich in der richtigen Reihenfolge... und könnte man nicht auch zeilenweise einfärben? Alles markieren zu müssen ist mir ein wenig zu umständlich :P (und habs ehrlich gesagt noch nicht probiert)

  • Die Farbe muss BGR sein, nicht RGB ;)
    0xFF0000 -> Blau
    0x00FF00 -> Grün
    0x0000FF -> Rot

    Und zum Zeilen einfärben aknnst du dir das anschauen Fragen
    (musst du eventuell an die andere UDf anpassen)

  • Hey ja.. war durcheinander gekommen weil in der anderen UDF glaub ich RGB verwendet wird...(verwende die weil, da sowieso deine Funktionen mit drinne sind + andere)
    Aber jetzt versteh ich die Welt garnich mehr :D
    Das muss doch rein vom logischen gehen?:

    Spoiler anzeigen
    [autoit]

    #include <GuiRichEdit.au3>
    #include <GuiConstants.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))

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

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

    _GUICtrlRichEdit_AppendText($h_RichEdit, "Ich bin genau 30 Zeichen lang!"& @CRLF)
    _GUICtrlRichEdit_AppendText($h_RichEdit, "Ich leider nur 16"& @CRLF)
    _GUICtrlRichEdit_AppendText($h_RichEdit, "Ich 5"& @CRLF)
    GUISetState()

    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0xFF0000,1)
    _GuiCtrlRichEdit_Deselect($h_RichEdit)
    sleep(2000)
    _GUICtrlRichEdit_SetLineColor($h_RichEdit,0x0000FF,3)
    _GuiCtrlRichEdit_Deselect($h_RichEdit)

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

    While 1
    $msg = GUIGetMsg()
    sleep(10)
    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $button
    Exit
    EndSelect
    WEnd

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

    ;Prog@ndy
    Func _GUICtrlRichEdit_SetLineColor($h_RichEdit,$Color,$Line)
    ;Start und Ende deklarieren:
    Local $LineStart = _GUICtrlRichEdit_GetFirstCharPosOnLine($h_RichEdit,$Line)
    Local $LineLength = _GUICtrlRichEdit_LineLength($h_RichEdit,$LineStart)
    MsgBox(0,"","Start: " & $LineStart & @CRLF & "Lenght: " & $LineLength,1)

    ;Selektieren:
    _GUICtrlRichEdit_SetSel($h_RichEdit, $LineStart,$LineLength)

    ;Einfärben
    _GUICtrlRichEdit_SetFontColor($h_RichEdit,$Color,True)
    EndFunc

    [/autoit]

    Tuts aber nich..

  • bei der markierung musst du vom nicht die Länge angeben, sondern die EndPosition:

    [autoit]

    _GUICtrlRichEdit_SetSel($h_RichEdit, $LineStart,$LineStart+$LineLength)

    [/autoit]
  • Ups, du hast recht :pinch: Och mann ich hab mindestens 5 mal die Selections-UDF an sich durchgelesen und deine UDF dazu und habs immer erfolgreich überlesen xD

    Okey dann ist das auch gelöst... vielen dank progandy!

  • Hallo, dieser Thread ist zwar alt aber ich hab ne Frag dazu.

    Ich hatte die RichEdit UDF von hier.
    http://progandy.pr.funpic.de/index.php/comp…/id,20/lang,de/

    jetzt habe ich aber den runtergeladen der hier gelinkt wurde.
    http://www.autoitscript.com/forum/index.php?showtopic=89358&hl=

    Welcher ist denn neuer? Weil bei den finde ich kein SetBold oder Italic usw

    Ich finde ieg den ersten link nicht schlecht.. aber da konnte ich keine Farbe finden.

    EDIT: Wie dumm von mir. Hab sie total übersehen :S
    Sorry