Seite 1 von 1

Dumme Frage zum Scrollbar Gadget

Verfasst: 27.10.2004 00:03
von jear
Ich stehe wie der Ochs vom Scheunentor.

Wie kann ich nachträglich die Relation der Schieberbreite zur Gesamtlänge eines Scrollbars ändern?

Verfasst: 27.10.2004 01:03
von Franky
Versuch mal SetScrollinfo :D

PS: Es gibt keine dummen Fragen, dumme Fragen sind nicht gestellte Fragen

Verfasst: 27.10.2004 02:11
von Ynnus
Das lässt sich gegenwärtig nur mit Hilfe der WinAPI regeln (ich geh davon aus, du benutzt Windows als OS, hast zumindest nichts anderes hingeschrieben). Ich hab mal den nötigen Code dafür herausgeschrieben mit kleinem Beispiel. Man sendet hierbei eine Message an die Scrollbar und übergibt als Parameter eine Structur in welcher die Infos für die neue Größe enthalten ist. Die Größe der Scrollbox befindet sich in "nPage". "nMax" würde die maximale Scrollgröße und "nMin" die minimale enthalten. "nPos" würde übrigends die Scrollposition enthalten. Da wir aber nichts anderes außer die Scrollbox-Größe ändern wollen, brauchen wir diese Werte auch nicht. Daher wird bei "fMask" das definiert, was geändert werden soll. Bei mrist das #SIF_PAGE, was so viel bedeutet wie, wir ändern nur die ScrollBox-Proportion. Bei fMask = SIF_POS könnten wir auch vereinbaren, dass er die Werte der Position der Scrollbox ändern soll. Brauchen wir aber nicht, also geben wir diese Werte auch nicht an in der Variablen mit der Structur.
Wir greifen hierbei also auf eine WinAPI-Structur zurück. (Du kannst dir auch eine eigene erstellen, aber das ist dann unnötig Arbeit).
Also definieren wir die Variablen mit Structur und legen alle nötigen Größen fest. Wir ändern die ScrollboxGröße, also fmask muss "#SIF_PAGE sein. Dann noch die neue Größe der Box festlegen, in dem Wert "nPage". Danach schicken wir eine Message an das Gadget und übergeben die Structur, daraus holt sich die Message automatisch die nötigen neuen Größen für die Scrollbar und altualisiert diese dann. Fertig.

Code: Alles auswählen

ScrollBarGadget(0, 400, 0, 400, 30, 0, 100, 5)
struc.SCROLLINFO
struc\fmask = #SIF_PAGE
struc\nPage=50

SendMessage_(GadgetID(0), #SBM_SETSCROLLINFO, #True, struc)
Natürlich benötigst du noch ein Fenster und eine Gadgetliste. Aber so könnte es aussehen. Zuerst die Scrollbar erstellen. Dann die WinAPI-Structur ScrollINFO nutzen und mit einer Variablen verbinden (in meinem Falle heißt sie struc) und per SendMessage die neue Page-Größe zuweisen. (Da meine ScrollBar 100 Schritte hat, kann man die Angabe hier als Prozentuale Angabe verstehen. Gibt ma 50 an, so wie in meinem Beispiel oben, dann ist die Scrollbox etwa halb so groß wie der ganze Scrollbalken.) Die Größe "nPage" (Größe der Scrollbox) ist also nicht in Pixel angegeben sondern im Verhältnis zu den Scrollschritten. Gibt es 10 Schritte, von 0 - 10, und du setzt die Größe auf 5, ist die Scrollbox auch hier wieder halb so groß wie die Scrollleiste. Bei 1 ist sie somit 1/10 so groß wie die Scrollleiste.

Infos zu den Dingen welche man noch alle ändern könnte und welche Variablen und Namen das dann wären, findest du in der Win32 Hilfedatei (WinAPI Hilfedatei).

Verfasst: 27.10.2004 10:40
von jear
Vielen Dank für die Tips, so klappt das prima.
Das müsste mal in einer Weiterentwicklung in PB rein.

Verfasst: 30.10.2004 00:58
von Andre
jear hat geschrieben:Das müsste mal in einer Weiterentwicklung in PB rein.
Habe Fred zumindest mal auf den "Anwenderwunsch" hingewiesen. :)

Verfasst: 30.10.2004 01:13
von Ynnus
Also die Scrolllänge vom ScrollAreaGadget lässt sich ja per Setgadgetattribute (oder wie gleich das immer hieß^^) ändern, bei der Scrollbar gibts da nichts womit man die Scrollweite noch ändern könnte. Dazu fällt dann auch die Proportion des Schiebereglers, was ja Thema hier ist. Also man könnte vielleicht dieses SetGadgetAttribute() noch ausweiten auf alle ScrollGadgets und damit die Scrollweite oder per Flag alternativ die Breite der Scrollbox ändern lassen.