Scrollbalken in einer RichEdit verstecken

  • Moin liebe Community,

    Ich hab mal wieder eine Frage :rolleyes:

    Und zwar habe ich eine RichEdit und wenn man zu viele Zeilen text schreibt, kommt natürlich ein Scroolbalken. Ich wollte einfach gerne das man ihn nicht sehen kann, aber trozdem wie gewohnt mit dem Scroolrad scroolen kann. Es gibt ja so Styles wo man dann garnicht mehr scroolen kann aber das möchte ich auch nicht.

    Ich hatte die Idee das man den Scroolbalken ja einfach aus dem Fenster schieben könnte. Doch dann müsste der Scroolbalken von anfang an erscheinen weil sich ja sonst ein teil des Textes solange bis der scroolbalken erscheind mit aus dem Fenster schiebt. Gibt es dafür einen Style oder sowas? Nätürlich ist diese Lösung ziemlich unsauber, also wenn ihr was anderes wisst sagt es, war halbt nur so eine Idee für eine Notlösung. Hab dazu auch die Scripts

    Ohne ihn aus dem Fenster zu schieben
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <WinAPI.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form2", 414, 502, 303, 219)
    GUISetBkColor (0x0000FF)
    $Edit = _GUICtrlRichEdit_Create($Form1, 6, 9, 403, 361,BitOR($ES_WANTRETURN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    _GUICtrlRichEdit_SetOLECallback($Edit)
    $Edit2 = GUICtrlCreateEdit("", 6, 375, 403, 91,$WS_VSCROLL+$ES_SUNKEN)
    $Button1 = GUICtrlCreateButton("Senden", 336, 471, 75, 25, 0)
    Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button1]]
    GUISetAccelerators($Form1_AccelTable)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Senden()
    EndSwitch
    WEnd
    Func _Senden()
    Local $Read = GUICtrlRead ($Edit2)
    GUICtrlSetData ($Edit2,"")
    _GUICtrlRichEdit_AppendText($Edit,$Read & @CR)
    EndFunc

    [/autoit]
    Aus dem Fenster geschoben
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <WinAPI.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form2", 414, 502, 303, 219)
    GUISetBkColor (0x0000FF)
    $Edit = _GUICtrlRichEdit_Create($Form1, 6, 9, 424, 361,BitOR($ES_WANTRETURN, $ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
    _GUICtrlRichEdit_SetOLECallback($Edit)
    $Edit2 = GUICtrlCreateEdit("", 6, 375, 403, 91,$WS_VSCROLL+$ES_SUNKEN)
    $Button1 = GUICtrlCreateButton("Senden", 336, 471, 75, 25, 0)
    Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button1]]
    GUISetAccelerators($Form1_AccelTable)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Senden()
    EndSwitch
    WEnd
    Func _Senden()
    Local $Read = GUICtrlRead ($Edit2)
    GUICtrlSetData ($Edit2,"")
    _GUICtrlRichEdit_AppendText($Edit,$Read & @CR)
    EndFunc

    [/autoit]
  • Oh ja tschuldigung, ich benutze die alte version von GuiRichEdit, da ich mit der neuen Prob hatte bei einem Chat den ich gerade am schreiben bin wo ich Smilys einbauen mösche

    Hab es in Post1 hochgeladen, link weiß ich nciht mehr, hatte ich einfach noch auf meinem PC. Aber du darfst nicht als Beta Kommpelieren, weil da hatte ich Prob, da war alles irgendwie veschoben, also ich schreib noch in 3.3.0.0

    mfg. Jam00

  • Ich hab es jetzt so gemacht

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiRichEdit.au3>
    #include <WinAPI.au3>
    #include <Constants.au3>

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

    HotKeySet ("{Down}","_ScrollDown")
    HotKeySet ("{Up}","_ScrollUp")
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form2", 414, 502, 303, 219)
    GUISetBkColor (0x0000FF)
    $Edit = _GUICtrlRichEdit_Create($Form1, 6, 9, 403, 361,BitOR($ES_WANTRETURN, $ES_MULTILINE))
    _GUICtrlRichEdit_SetOLECallback($Edit)
    $Edit2 = GUICtrlCreateEdit("", 6, 375, 403, 91,$WS_VSCROLL+$ES_SUNKEN)
    $Button1 = GUICtrlCreateButton("Senden", 336, 471, 75, 25, 0)
    Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button1]]
    GUISetAccelerators($Form1_AccelTable)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Senden()
    EndSwitch
    WEnd
    Func _Senden()
    Local $Read = GUICtrlRead ($Edit2)
    GUICtrlSetData ($Edit2,"")
    _GUICtrlRichEdit_AppendText($Edit,$Read & @CR)
    EndFunc
    Func _ScrollDown()
    $Zeile = _GUICtrlRichEdit_GetScrollPos($Edit)
    _GUICtrlRichEdit_SetScrollPos($Edit,$Zeile[0],$Zeile[1] + 1)
    EndFunc
    Func _ScrollUp()
    $Zeile = _GUICtrlRichEdit_GetScrollPos($Edit)
    _GUICtrlRichEdit_SetScrollPos($Edit,$Zeile[0],$Zeile[1] - 1)
    EndFunc

    [/autoit]

    Allerdings geht da das Mausrad nicht mehr :(

    mfg. Jam00

    • Offizieller Beitrag

    Du mußt die Scrollmessage verwenden und dann selbst die sichtbaren Zeilen im Edit bewegen.
    Ich hab hier im Bsp. den Scrollleisten-Style rausgenommen. Durch das Abfragen von WM_MOUSEWHEEL kann man aber das Scrollereignis auswerten.
    Problem: Ich finde in der GUIRichEdit.au3 keine Möglichkeiten die erste sichtbare Zeile zu setzen. Diese Funktion ist nötig um dein eigenes Scrollen ohne Scrolleiste auszuführen.

    Spoiler anzeigen
    [autoit]

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

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

    Global Const $WM_MOUSEWHEEL = 0x20A

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

    $text = _
    'Purpose' & @LF & _
    'Microsoft Windows Firewall and Windows Firewall with Advanced Security protect computers on which they are running from unsolicited network traffic. The Windows Firewall and Windows Firewall with Advanced Security APIs make it possible to programmatically manage the features of Windows Firewall (formerly known as Internet Connection Firewall) by allowing applications to create, enable, and disable firewall exceptions. The Windows Firewall with Advanced Security is available only on Windows Vista.' & @LF & _
    'Where Applicable' & @LF & _
    'The Windows Firewall API is intended for situations in which a software application or setup program must operate with adjustments to the configuration of the networking environment in which it runs. For example, a service that needs to receive unsolicited traffic can use this API to create exceptions that allow the unsolicited traffic.' & @LF & _
    'Developer Audience' & @LF & _
    'The Windows Firewall API is designed for use by programmers using C/C++, Microsoft Visual Basic development system, Visual Basic Scripting Edition, and JScript development software. Programmers should be familiar with networking concepts such as stateful packet filtering, TCP/IP protocol concepts, and network address translation (NAT).' & @LF & _
    'Run-Time Requirements' & @LF & _
    'The Windows Firewall API is supported on Windows XP with Service Pack 2 (SP2). For more specific information about which operating systems support a particular programming element, refer to the Requirements sections in the documentation.' & @LF & _
    'The Windows Firewall with Advanced Security API is available only on Windows Vista.'

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

    $Form1 = GUICreate("Form2", 414, 502, 303, 219)
    GUISetBkColor (0x0000FF)
    $Edit = _GUICtrlRichEdit_Create($Form1, 6, 9, 403, 361,BitOR($ES_WANTRETURN, $ES_MULTILINE, $ES_AUTOVSCROLL))
    _GUICtrlRichEdit_SetOLECallback($Edit)
    $Edit2 = GUICtrlCreateEdit("", 6, 375, 403, 91,$WS_VSCROLL+$ES_SUNKEN)
    GUICtrlSetData(-1, $text)
    $Button1 = GUICtrlCreateButton("Senden", 336, 471, 75, 25, 0)
    Dim $Form1_AccelTable[1][2] = [["{ENTER}", $Button1]]
    GUISetAccelerators($Form1_AccelTable)
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_MOUSEWHEEL, '_MY_WM_MOUSE_WHEEL')

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Senden()
    EndSwitch
    WEnd
    Func _Senden()
    Local $Read = GUICtrlRead ($Edit2)
    GUICtrlSetData ($Edit2,"")
    _GUICtrlRichEdit_AppendText($Edit,$Read & @CR)
    EndFunc

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

    Func _MY_WM_MOUSE_WHEEL($hWnd, $Msg, $wParam, $lParam)
    Local $Delta = BitShift($wParam, 16), $posM[2], $overCtrl = 0, $Opt
    Local $posC = ControlGetPos($Form1, '', $Edit)
    Local $old = Opt('MouseCoordMode', 2)
    Local $posM = MouseGetPos()
    Opt('MouseCoordMode', $old)
    If ($posM[0] >= $posC[0] And $posM[0] <= $posC[0]+$posC[2]) And _
    ($posM[1] >= $posC[1] And $posM[1] <= $posC[1]+$posC[3]) Then
    $overCtrl = 1
    EndIf
    If Not $overCtrl Then Return $GUI_RUNDEFMSG
    Local $rows = Abs($Delta) /120
    Local $1stVisibleLine = _SendMessage($Edit, $EM_GETFIRSTVISIBLELINE)
    ConsoleWrite('$1stVisibleLine = ' & $1stVisibleLine & @crlf)
    If $Delta < 0 Then ; abwärts scrollen, Zeilen aufsteigend
    ConsoleWrite('Runter Zeilen: ' & $rows & @CRLF)
    ; 1stVisible +Rows
    Else ; hoch scrollen, Zeilen fallend
    ConsoleWrite('Hoch Zeilen: ' & $rows & @CRLF)
    ; 1stVisible -Rows
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Ich denke die UDF ist veraltet. In der Beta von Autoit ist die GUIRichEdit.au3 enthalten, mit weitaus größerem Funktionsumfang.
    Soviel ich jetzt gesehen habe, sollte man die 1. sichtbare Zeile mit _GUICtrlRichEdit_SetScrollPos setzen können.
    Bin mir aber nicht ganz Sicher, diese UDF ist Neuland für mich. 8o

    • Offizieller Beitrag

    Ich denke die UDF ist veraltet. In der Beta von Autoit ist die GUIRichEdit.au3 enthalten


    Die UDF aus der Beta kann man leider nicht nutzen. Nach Beenden eines Skriptes existiert der Prozeß autoit3.exe weiterhin mit CPU-Last von 98%!
    Hab jetzt noch nicht weiter getestet, ob das nur diese UDF betrifft oder die Beta insgesamt so buggy ist. (Ich weiß schon, warum ich bei der Stable bleibe ;) )

  • Man kann ja mal gucken welche Funcs man dafür braucht, aus der Beta und die dann einfach in die Alte reinkopieren und gucken ob dann alles noch in ordnung ist, ich guck mir mal die Beta an und schreib alle funcs raus die was mit srollen zu tun haben

    EDIT:
    Ich hab die Gefunden

    mfg. Jam00

    Einmal editiert, zuletzt von Jam00 (29. November 2009 um 17:22)