Hilfe bei Berechnung eines Scrollbalkens
-
Hi.
Ich bastel mir gerade einen eigenen Scrollbalken für ein GUI das ich komplett selbst entwerfe (für eine SDL App). Das ganze hat bis jetzt auch super funktioniert, die Hoch- und Runterknöpfe funktionieren. Jedoch komme ich jetzt dazu, um auszurechnen, wie lang der Scrollbalken (also der längere Button in der Mitte) sein soll und wie man ausrechnet, an welche Position man scrollen muss, wenn der Balken an der und der Position ist.Momentan habe ich folgende Variablen zur Verfügung:
iStart > gibt aktuelle, oberste dargestellte Zeile an
iLines > gibt maximale, anzuzeigene Zeilen an
iHeight > höhe des Bereichs in Pixeln
vecLines > Vektor aller Zeilen
iLineHeight > (konstante) Höhe einer Zeile: 15 PixelIch habe dabei leider überhaupt keine Idee, weder finde ich Hilfe per Google :<
Hoffentlich kann mir da (mal wieder) jemand helfen :>Danke im voraus!
~ Chris
-
Wie soll denn das ganze funktionieren?
Also Soll der Scrollbalken kleiner werden, wenn mehr Einträge da sind, oder eher konstant lang sein?
Für die Navigation kannst du es ja so machen, dass, wenn der Balken ganz oben ist das 0.0 entspricht und wenn er ganz unten 1.0. Dann kannst du das ja relativ einfach ausrechen, wieviele Zeilen angezeigt werden müssen.
-
Hi.
Also es wäre natürlich besser, wenn sich der Scrollbalken den Anzahl der Einträgen nach anpasst. Es geht ja aber nicht nur darum, sonder auch rauszukriegen, auf welchen Wert ich iStart setzen muss, wenn der Balken bewegt wird - und dort liegen meine Probleme. Ich kann mir irgendwie keine logische Formel zusammenreimen, bei der das auch nur annähernd passen könnte.~ Chris
-
Also wenn der Balken ganz unten ist, dann ist klar, dass du so weit runterscrollst, dass du das letzte Element noch siehst. Also sagen wir 50 Zeilen runter. Und wenn der Balken auf 50% ist, dann muss halt die 25igste Zeile in der Mitte sein. 25*iLineHeight = 375 Pixel runter. Dann kommt es halt noch drauf an, wie Hoch das Feld ist, aber ich denke, dass sollte mit ein wenig rumspielen kein Problem sein.
-
scollposition = (scrollbalken->top - scrollbalken->height)/2 * lines->count*lines->height; scrollbalken->height = bildschirm->height / (lines->count*lines->height); if(scrollbalken->height == 1) scrollbalken->SetVisible(false);oder so ähnlich...
das /2 kannste auch zu nem shift umwandeln... aber das wird dein compiler auch so machen...
bb