OK, here it is:
Far from optimized, let me know of any bugs or features you want :)
SetBuffer BackBuffer() Local items$[50] items[0]="Exit" items[1]="Return" items[2]="Start" items[3]="Wombatify" items[4]="Forty-two" items[5]="Shrubbery" While action<>1 Cls If MouseHit(2) action=PopupMenu(MouseX(),MouseY(),items,6) EndIf Delay 10 Flip Wend ;******************************* ;** Function PopupMenu() **** ;**Parameters: ;x: the x coordinate of the upper left corner of the menu ;y: the y coordinate of the upper left corner of the menu ;item$[50]: the text of the menuitems. Must be a 50-member blitzarray ;num: the number of menuitems. can be up to 50 ;return value: the index of the menuitem selected, starting from 1 ;if no item is selected, it returns 0 Function PopupMenu%(x,y,item$[50],num) Local width=0,temp Local gw=GraphicsWidth(),gh=GraphicsHeight() If num>50 Return 0 For i=0 To num-1 temp=StringWidth(item[i]) If temp>width width=temp Next temp=CreateImage(gw,gh) CopyRect 0,0,gw,gh,0,0,GraphicsBuffer(),ImageBuffer(temp) Repeat Cls DrawImage temp,0,0 my=(MouseY()-y)/FontHeight() If my<num And (MouseX()>x And MouseX()<x+width) pos=my Else pos=-1 EndIf For i=0 To num-1 Color 255,255,255 Rect x-1,y+(i*FontHeight())-1,width+5,FontHeight()+2,1 Color 0,0,0 Rect x-1,y+(i*FontHeight())-1,width+5,FontHeight()+2,0 Text x,y+(i*FontHeight()),item[i] Next Flip Delay 10 Until MouseHit(1) Cls DrawImage temp,0,0 FreeImage temp Return pos+1 End Function
Far from optimized, let me know of any bugs or features you want :)