Automatisches Scrollen bei Edit mit $ES_READONLY

  • Hi,

    Ich habe ein kleines Problem.

    Wenn ich ein Editfenster in einer GUI mit GUICtrlSetData(...) so lange befüttere, bis der Text den unteren Rand erreicht hat, funktioniert $ES_AUTOVSCROLL nicht, da das Programm in die Editbox schreibt und nicht der Benutzer. Wie kann ich den Scrollbalken immer ganz nach Unten schieben, wenn das Programm etwas Neues in die Editbox schreibt?

    Gruß Polaris

    Einmal editiert, zuletzt von Polaris32 (4. Juli 2010 um 13:53)

  • thx für die schnelle antwort

    weisst du wie ich immer ganz nach unten scrollen kann ohne die anzahl der linien anzugeben?

    EDIT: habs gefunden thx nochmal

  • Mach einfach so dass er nach jeder GUICtrlSetData() ein nach unten scrollt

    mit _GUICtrlEdit_Scroll() brauchst du nicht die anzahl der linien angeben ?! du musst nur den Handle von der Edit und die direction (richtung) vonhin er scrollt.

    $iDirection - Dieser Parameter kann einen der folgenden Werte erhalten:
    $SB_LINEDOWN - Scrollt eine Zeile runter
    $SB_LINEUP - Scrollt eine Zeile hoch
    $SB_PAGEDOWN - Scrollt eine Seite runter
    $SB_PAGEUP - Scrollt eine Seite hoch
    $SB_SCROLLCARET - Scrollt den blinkenden Balken in die Ansicht

  • ja ich dachte halt _GUICtrlEdit_Scroll ( $handle ,$SB_LINEDOWN ) so oft bis man unten ist

    am Anfang ist das Fenster aber noch leer, wenn ich dann die Funktion aufrufe macht das dann was, auch wenn er nicht scrollen kann?

  • hm bei mir kommt gerade so n SQL error wenn ich da draufklick

    ich schaus mir dann man an wenns geht

    dann danke ich euch allen für die schnelle hilfe

    Gruß Polaris

    Edit: Wenn ich das nach jedem GuiCtrlSetData() mache dann scrollt er zwar runter aber nur minimal und nicht eine ganze zeile

    ist das normal??

    Edit2: Fehler gefunden. Er springt nach jedem GuiCtrlSetData() immer ganz nach oben also ist man praktisch die ganze zeit in der 2ten zeile. ich hba uch schon ne idee wie ich es hinkriegen könnte. wenns nicht tut heul ich mich hier wieder aus :D :D :D

    2 Mal editiert, zuletzt von Polaris32 (3. Juli 2010 um 23:51)

  • hm

    ich habs jetzt so "gelöst":


    [autoit]

    Func _Scroll()
    $linecount = _GUICtrlEdit_GetLineCount ( $chatfeld )
    For $i = 0 To $linecount Step 1
    _GUICtrlEdit_Scroll ( $chatfeld , $SB_LINEDOWN )
    Next
    EndFunc

    [/autoit]

    Es tut sogar. NUR: es ist etwas zu langsam. Man sieht das Fenster ständig Flackern wenn die Funktion aufgerufen wird.

    Wie könnte man das schneller machen?

    Edit:

    habs

    [autoit]

    Func _Scroll()
    $linecount = _GUICtrlEdit_GetLineCount ( $chatfeld )
    If $linecount > 45 Then
    For $i = 0 To $linecount / 45 Step 1
    _GUICtrlEdit_Scroll ( $chatfeld , $SB_PAGEDOWN )
    Next
    Else
    For $i = 0 To $linecount / 2
    _GUICtrlEdit_Scroll ( $chatfeld , $SB_LINEDOWN )
    _GUICtrlEdit_Scroll ( $chatfeld , $SB_LINEDOWN )
    Next
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Polaris32 (4. Juli 2010 um 12:41)