![]() |
Wie kann man richtig scrollen?
Hallo zusammen,
ich habe mir einen Browser für Stringlisten gebastelt, der bis 32.000 Zeilen auch ganz brauchbar ist. (16-Bit Integer) Da ich manchmal ein paar Zeilen mehr bewegen muß habe ich versucht mit GetScrollPos und GetScrollInfo höhere Werte für meine angezeigte Zeile(n) zu realisieren. In beiden Fällen funktioniert es nicht. ScrollInfo liefert nur Nullen zurück(!?) und GetScrollPos die letzte Position vor dem Bewegen des Thumb.
Delphi-Quellcode:
Kann mir da einer weiterhelfen?
case Message.ScrollCode of
SB_LINEDOWN : Inc(NewTopLine); SB_LINEUP : Dec(NewTopLine); SB_PAGEDOWN : Inc(NewTopLine, FVisibleLines - 1); SB_PAGEUP : Dec(NewTopLine, FVisibleLines - 1); {SB_THUMBPOSITION, SB_THUMBTRACK: NewTopLine := Message.Pos;} { funktioniert nutr bis $7FFF } //SB_THUMBPOSITION : NewTopLine := GetScrollPos(handle,SB_VERT)+1; SB_THUMBPOSITION : begin fillchar(Scrollinfo,sizeof(scrollinfo),#0); Scrollinfo.cbSize := SizeOf(ScrollInfo); Scrollinfo.fMask := SIF_ALL; GetScrollInfo(Handle, SB_CTL, ScrollInfo); NewTopLine := Scrollinfo.nTrackPos; end; end; Gruß K-H |
Re: Wie kann man richtig scrollen?
Richtiges Handle für GetScrollInfo benützt? (nimmst du nicht das Handle des Formulars anstelle des Scrollbars?)
Und der Returnwert von GetScrollInfo sollte ausgewertet werden. |
Re: Wie kann man richtig scrollen?
Ja das Handle sollte das richtige sein, bei GetScrollPos kommt der korrekte Ausgangswert zurück. (das +1 ist ein Überrest vom Testen).
Hier nicht mehr sichtbar habe ich ein GetLastError eingebaut, das nie einen Fehler zurückgegeben hat. Gruß K-H |
Re: Wie kann man richtig scrollen?
Falls es jemanden interessieren sollte, so geht's:
Delphi-Quellcode:
Augenscheinlich ist SB_CTL in diesem Falle nicht anwendbar.
SB_THUMBPOSITION : begin
fillchar(Scrollinfo,sizeof(scrollinfo),#0); Scrollinfo.cbSize := SizeOf(ScrollInfo); Scrollinfo.fMask := SIF_ALL; GetScrollInfo(Handle, SB_VERT, ScrollInfo); // die richtige Bewegungsrichtung eintragen! NewTopLine := Scrollinfo.nTrackPos; end; Grüße K-H Nachtrag:
Delphi-Quellcode:
falls man etwas bescheiderner ist und keine 32Bit braucht.
SB_THUMBPOSITION, SB_THUMBTRACK: NewTopLine := Message.Pos; { funktioniert nur bis $7FFF }
SB_THUMBPOSITION, SB_THUMBTRACK: NewTopLine := word(Message.Pos); { funktioniert bis $FFFF } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz