Liten Datorhandbok För Målmedvetna

Academic Computer Club, Umeå Universitet, 2000


Macintosh Programmering

Rullningslister

Hur rullningslisterna i ett program fungerar verkar ganska självklart och man tänker sig gärna att det inte skulle vara speciellt svårt att programmera dem. Det är dock inte lika lätt som det ser ut.

Till att börja med måste du skapa rullningslisten som en kontroll i ditt fönster. Det gör du med ett anrop av typen:

scrollBarHandle=NewControl(windowPtr,&rect,"\p",true,0,0,0,scrollBarProc,0L); Sedan måste du ställa in min-, max- och nuvarande värde på rullningslisten, så att de matchar den faktiska längden på ditt dokument och den nuvarande positionen. Det gör du genom att använda funktionerna:

SetCtlMax(scrollBarHandle, theMaxValue); SetCtlMin(scrollBarHandle, theMinValue); SetCtlValue(scrollBarHandle, theValue); När så ett klick inträffar måste du ta reda på i vilken del av rullningslisten användaren klickade. Om hon klickade i hissen så sköter systemet om det mesta, men om klicket skedde någon annanstans så måste du använda dig av en återanropsfunktion, det vill säga en funktion som du skapar och som systemet anropar då den behövs. Orsaken till detta är att dokumentet behöver rullas och ritas om medan användaren håller nere musknappen över någon av pilarna. Ett kodskal för att hantera klickningar i en rullningslist kan se ut ungefär så här:

void scrollClick(ControlHandle whichControl, short part, Point loc) { short oldPos, newPos; oldPos=GetCtlValue(whichControl); if (part==inThumb) { part=TrackControl(whichControl,loc,0L); newPos=GetCtlValue(whichControl); if (newPos!=oldPos) { SetCtlValue(whichControl,newPos); // Rulla dokumentet här } } else part=TrackControl(whichControl,loc,vScroll); // Ej för PPC-kompilator } Här är vScroll vår återanropsrutin. Den kan till exempel definieras som:

static pascal void vScroll (ControlHandle theControl, short part) { short oldPos, newPos; oldPos=GetCtlValue(theControl); switch(part) { case inUpButton: newPos=oldPos-1; break; case inDownButton: newPos=oldPos+1; break; case inPageUp: // Ge newPos ett värde så att en skärmfull rullas upp break; case inPageDown: // Ge newPos ett värde så att en skärmfull rullas ned break; } // Rulla dokumentet här SetCtlValue(theControl,newPos); }

Författat av Niklas Frykholm


Bakåt , Framåt , Upp, Huvudsida
Denna sida ändrades sist av handbok den 26/05 1996 12:37:22.
Last modified Sunday, 26-May-1996 12:37:22 CEST