Don't know if this will help, it's from my own gui thingy. You send the options as a | seperated list. No scrolling though.
Function list(x,y,width,height,options$,value) Color 210,210,210 Rect x,y,width,height,True Color clip(gui_r-gui_contrast),clip(gui_g-gui_contrast),clip(gui_b-gui_contrast) Line x,y,x+width,y Line x,y,x,y+height Color clip(gui_r+gui_contrast),clip(gui_g+gui_contrast),clip(gui_b+gui_contrast) Line x+width,y,x+width,y+height Line x,y+height,x+width,y+height Color 0,0,0 Viewport x,y,width,height ret_value=-1 yy=0 pos=1 selection=0 Repeat comma=Instr(options,"|",pos) v$=Mid$(options,pos,comma-pos) If selection=value Then Color 150,150,150:Rect x+1,(y+1)+yy,width-1,16,True Color 0,0,0 If RectsOverlap (x+1,(y+1)+yy,width-1,14,MouseX(),MouseY(),1,1) And RectsOverlap (x,y,width,height,MouseX(),MouseY(),1,1) Rect x+1,(y+1)+yy,width-1,16,True Color 210,210,210 If MouseDown(1) Then ret_value=selection:gui_click=True EndIf Text x+4,(y+2)+yy,v$ pos=comma+1 yy=yy+14 selection=selection+1 Until comma=0 Viewport 0,0,GraphicsWidth(),GraphicsHeight() If ret_value>-1 Then Return ret_value Else Return value End Function