Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie kann man richtig scrollen? (https://www.delphipraxis.net/143780-wie-kann-man-richtig-scrollen.html)

p80286 23. Nov 2009 13:48


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:
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;
Kann mir da einer weiterhelfen?

Gruß
K-H

shmia 23. Nov 2009 16:54

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.

p80286 23. Nov 2009 17:10

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

p80286 24. Nov 2009 10:09

Re: Wie kann man richtig scrollen?
 
Falls es jemanden interessieren sollte, so geht's:
Delphi-Quellcode:
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;
Augenscheinlich ist SB_CTL in diesem Falle nicht anwendbar.

Grüße
K-H

Nachtrag:

Delphi-Quellcode:
SB_THUMBPOSITION, SB_THUMBTRACK: NewTopLine := Message.Pos; { funktioniert nur bis $7FFF }
SB_THUMBPOSITION, SB_THUMBTRACK: NewTopLine := word(Message.Pos); { funktioniert bis $FFFF }
falls man etwas bescheiderner ist und keine 32Bit braucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz