In ScrollAreaGadget() zu Position 0,0 springen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

In ScrollAreaGadget() zu Position 0,0 springen

Beitrag von Delle »

Geht das? Finde bei den Gadgets nichts dazu... bleibt wohl nur WinAPI übrig, falls überhaupt? Oder das ScrollAreaGadget einfach nochmal neu zeichnen?
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Vielleicht hilft dir das hier weiter:

Code: Alles auswählen

int SetScrollPos(

    HWND hWnd,	// handle of window with scroll bar
    int nBar,	// scroll bar flag
    int nPos,	// new position of scroll box
    BOOL bRedraw 	// redraw flag
   );
Sieht dann so in PB aus:

Code: Alles auswählen

SetScrollPos_(gadgetid(#gadget), #SB_VERT, 0, #true)
SetScrollPos_(gadgetid(#gadget), #SB_HORZ, 0, #true)
Wenn die Konstante #true nicht bekannt ist nimm dafür einfach den Wert 1.

so lässt es sich normalerweise bei Fenstern anwenden, die eine Scrollleiste haben. Wie das mit dem ScrollareaGagdet aussieht weiß ich nicht. Das ist ja ein zusammengesetztes Gadget aus mehreren Fenstern. Musst du ausprobieren. ;)
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Geht leider nicht, schon probiert :-)

Hier die Lösung:
Structure PB_ScrollAreaData
ScrollAreaChild.l
ScrollStep.l
EndStructure

Procedure ScrollScrollArea(gadget, xoffset, yoffset, redraw.b)
hScrollArea = GadgetID(gadget)
*SAGdata.PB_ScrollAreaData = GetWindowLong_(hScrollArea, #GWL_USERDATA)
If *SAGdata
posX = GetScrollPos_(hScrollArea, #SB_HORZ)
posY = GetScrollPos_(hScrollArea, #SB_VERT)
SetScrollPos_(hScrollArea, #SB_HORZ, posX + xoffset, #True)
SetScrollPos_(hScrollArea, #SB_VERT, posY + yoffset, #True)
posX = GetScrollPos_(hScrollArea, #SB_HORZ)
posY = GetScrollPos_(hScrollArea, #SB_VERT)
GetWindowRect_(*SAGdata\ScrollAreaChild, wr.RECT)
MoveWindow_(*SAGdata\ScrollAreaChild, -posX, -posY, wr\Right - wr\Left, wr\Bottom - wr\Top, #True)
If redraw
UpdateWindow_(GadgetID(4646))
EndIf
EndIf
EndProcedure
Fett markierte Stelle: Angabe des 1. Gadgets im ScrollAreaGadget.

Aufruf zum Hochspringen (fette Stelle Gesamtlänge):
ScrollScrollArea(#GadgetID,0,-27640,true)
Aufruf zum Runterspringen (fette Stelle Gesamtlänge):
ScrollScrollArea(#GadgetID,0,27640,true)
Antworten