The last of the workshop programs today was also converted from MiniBASIC. (But I know I also have done it with EB some time).
It shows how to make a Pie Chart. If the Pie Chart need explanation, the Legend subroutine can be copied from the BarGraph code posted below. We'll leave that up to you.
Have Fun!
'
'-------------------------------------------------------------------------------------
' CB_PieChart.CBA
'-------------------------------------------------------------------------------------
AutoDefine "Off"
DECLARE "gdi32.dll",AngleArc(hdc:INT, x:INT, y:INT, dwRadius:INT,startangle:float,endangle:float),INT
DECLARE About(wnd:window)
DECLARE AskExit(wnd:window)
DECLARE MyMenu(wnd:window)
DECLARE cosd(ang:float)
DECLARE sind(ang:float)
DECLARE Pie(wnd:window,cntx:int,cnty:int,rds:int,startangle:float,endangle:float,cr:int,cg:int,cb:int)
def win:window
def run:int
Window win,-480,0,480,300,0,0," CB Skeleton Window",messages
move win,180,10
print win,"Right-Click for Menu"
Pie(win,240,150,70,0,20,0,128,255)
Pie(win,240,150,70,20,45,255,0,128)
Pie(win,240,150,70,45,80,0,255,128)
Pie(win,240,150,70,80,120,255,128,128)
Pie(win,240,150,70,120,360,252,252,202)
run = 1
WAITUNTIL run = 0
CLOSEWINDOW win
END
'
SUB messages()
'-------------------------------------------------------------------------------------
' Main Loop
'-------------------------------------------------------------------------------------
'
SELECT @class
CASE @idcreate
centerwindow win
CASE @idclosewindow
run = 0
CASE @IDKEYDOWN
if GETKEYSTATE(0x1B) <> 0 then AskExit(win) :' ESC pressed - want to exit?
CASE @IDRBUTTONUP
MyMenu(win)
CASE @IDMENUPICK
SELECT @MENUNUM
case 10
About(win)
case 20
system "http://www.ionicwind.com/forums/"
case 30
AskExit(win)
ENDSELECT
ENDSELECT
RETURN
'---------------------------------------------------------------------------------------
'
SUB Pie(wnd:window,cntx:int,cnty:int,rds:int,startangle:float,sweep:float,cr:int,cg:int,cb:int)
'---------------------------------------------------------------------------------------
' HOW TO USE:
' wnd = window handle
' cntx,cnty = coordinates of circle center
' rds = radius
' StartAngle = starting angle of the sector in degrees
' EndAngle = EndAngle of sector in degrees
' cr, cg, cb = sector colors
'
' NB:
' Zero degrees at due east (to the right)....
' Positive angle values move anticlockwise - negative angle values move clockwise
'---------------------------------------------------------------------------------------
def hdc,ffx,ffy:int
FRONTPEN wnd,RGB(255,255,254) :' At least one parameter MUST have value below 255 to obtain "invisible" lines!
:' If all of then are set to 255, the window looks like a mess - try it yourself...
move(wnd,cntx,cnty)
hdc = GetHDC wnd
AngleArc(hdc,cntx,cnty,rds,startangle,endangle)
move(wnd,cntx,cnty)
AngleArc(hdc,cntx,cnty,rds,endangle,-1)
ffx = cntx + ((rds/2) * cosd(startangle+1))
ffy = cnty - ((rds/2) * sind(startangle+1))
move(wnd,ffx,ffy)
FLOODFILL wnd,ffx,ffy,RGB(cr,cg,cb)
RELEASEHDC(wnd,hdc)
FRONTPEN wnd,RGB(0,0,0)
RETURN
'
SUB cosd(ang:float)
'----------------------------------------------------------------------------------------
' cosd
'----------------------------------------------------------------------------------------
def ret,pi:float
pi = 4 * atan(1)
ret = ang*pi/180
RETURN cos(ret)
'
SUB sind(ang:float)
'----------------------------------------------------------------------------------------
' sind
'----------------------------------------------------------------------------------------
def ret,pi:float
pi = 4 * atan(1)
ret = ang*pi/180
RETURN sin(ret)
'
SUB MyMenu(wnd:window)
'----------------------------------------------------------------------------------------
' Contextmenu - Popping up at pointer location
'----------------------------------------------------------------------------------------
'
CONTEXTMENU wnd,@MOUSEX,@MOUSEY,"I,About,0,10","I,IonicWind User Forums,0,20","I,Exit,0,30"
RETURN
'
SUB AskExit(wnd:window)
'----------------------------------------------------------------------------------------
' Ask if you really want to exit
'----------------------------------------------------------------------------------------
'
def txt0$,txt1$,crlf$:string
crlf$=chr$(10)+chr$(13)
txt0$=""
txt1$=" Do you really want to exit? "
if MESSAGEBOX(wnd,txt1$,txt0$,0x30|0x04) = 0x06 then run = 0
RETURN
'
SUB About(wnd:window)
'----------------------------------------------------------------------------------------
' Showing messagebox
'----------------------------------------------------------------------------------------
'
def txt0$,txt1$,crlf$:string
crlf$=chr$(10)+chr$(13)
txt0$=" Coded with Creative Basic "
txt1$=" ENJOY! "
MESSAGEBOX wnd,txt1$,txt0$,0x40
RETURN