Edit und Scrollbalken, nur wenn nötig

  • wenn ich ein edit-ctrl erstelle, habe ich ausgeraut einen horizontlen und vertikalen balken. sobald ich nun mehr schreibe, als im editfeld horitontal oder vertikal angezeigt werden kann, werden die balken aktiv und ich kann nach links/rechts und/oder oben/unten scrollen, auch mit der maus.

    wenn ich $WS_VSCROLL, $WS_HSCROLL als style weglasse, erscheinen die balken nicht mehr, auch nicht, wenn ich wieder über das editfeld hinaus schreibe und man kann nicht mit der maus scrollen.

    ich möchte das die balken erst nicht angezeigt werden, es sei denn, der text im feld geht über die grenzen.

    hoffe das ist verständlichen =)

  • Schonmal nen Ansatz:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIEdit.au3>
    #include <StaticConstants.au3>

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

    Local $myedit, $msg

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

    GUICreate("My GUI edit", -1, -1, 100, 100, $WS_SIZEBOX) ; will create a dialog box that when displayed is centered

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

    $Lines = GUICtrlCreateEdit(StringReplace("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22",",",@CRLF), 10, 10, 30, 300,$ES_READONLY)
    GUICtrlSetState(-1,$GUI_DISABLE)
    GUICtrlSetResizing ($Lines, $GUI_DOCKWIDTH + $GUI_DOCKLEFT)
    $myedit = GUICtrlCreateEdit("First line" & @CRLF, 40, 10, 300, 300,$ES_AUTOVSCROLL)
    GUICtrlSetResizing ($myedit, $GUI_DOCKLEFT + $GUI_DOCKRIGHT)
    GUIRegisterMsg($WM_COMMAND,"MY_WM_COMMAND")

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

    GUISetState()

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

    Send("{END}")

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

    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

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

    Func MY_WM_COMMAND($hWnd, $uMsg, $wParam, $lParam)
    Local $nID = BitAND($wParam,0xFFFF)
    Local $nNotification = BitShift($wParam,16)
    If $nNotification = $EN_VSCROLL And $nID = $myedit Then
    Local $Zahlen
    For $i = 1 To _GUICtrlEdit_GetLineCount($lParam)
    $Zahlen &= $i & @CRLF
    Next
    GUICtrlSetData($Lines,$Zahlen)
    If $i > 22 Then
    GuiCtrlSetStyle($myEdit,$WS_VSCROLL)
    Else
    GuiCtrlSetStyle($myEdit,$ES_AUTOVSCROLL)
    EndIf
    _GUICtrlEdit_LineScroll($Lines, 0, _GUICtrlEdit_GetFirstVisibleLine($lParam))
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • hmm sorry, ich glaub wir verstehen uns immer noch nicht *g*

    die normale funktionalität der edit box ist iO.

    ich würde die box gerne so erstellen

    [autoit]

    GUICtrlCreateEdit("", 0, 200, $w, $h - 200, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL))

    [/autoit]

    also ohne $WS_VSCROLL, $WS_HSCROLL.

    wenn nun aber viel text in der box steht, sollen die leisten doch angezeigt werden.

  • ok, ich hab mal ne ganz einfach lösung =)

    [autoit]

    $gui = GUICreate("", $w, $h, $x, $y, BitOR($WS_POPUP, $WS_POPUPWINDOW, $WS_SIZEBOX, $WS_THICKFRAME), $WS_EX_TOOLWINDOW)
    $edit = GUICtrlCreateEdit("", 0, 200, $w + 20, $h - 180, BitOR($ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $WS_VSCROLL, $WS_HSCROLL))
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER)

    [/autoit]

    ich erstelle das edit fenster einfach in der größe + 20 mehr als das fenster, somit werden die balken nicht angezeigt, sind aber da und damit auch das mausrad nutzbar =)

    so einfach gehts *g*