; ID: 1719 ; Author: Mag ; Date: 2006-05-26 04:57:27 ; Title: Max menu ; Description: A colapable menu like 3ds max ;================================================================== Const ProjectTitle$ = "Max Menu" Const Author$ = "Mag.ic" Const Date$ = "Jan 2004" Const Version$ = "0.01" ;================================================================== ;SETTING Global FormBGColor=15526360 Global CaptionBGColor=$C0C0C0 Global CaptionFGColor=$000000 Global ContentBGColor=$F0FFFF Global ContentFGColor=$000080 Global AutoColapseMyMenu=0 ;only one menu uncollapse Const TotalMyMenu=6 ;total of collapse menu to create Dim Mymenu$(TotalMyMenu):Dim MymenuCollapse(TotalMyMenu):Dim MymenuHeight(TotalMyMenu) MyMenu$(1)="General":MymenuCollapse(1)=0:MymenuHeight(1)=80 MyMenu$(2)="Gadget":MymenuCollapse(2)=0:MymenuHeight(2)=150 MyMenu$(3)="Property":MymenuCollapse(3)=0:MymenuHeight(3)=294 MyMenu$(4)="Selection Tree":MymenuCollapse(4)=0:MymenuHeight(4)=200 MyMenu$(5)="Menu Editor":MymenuCollapse(5)=0:MymenuHeight(5)=100 MyMenu$(6)="Info & Setting":MymenuCollapse(6)=1:MymenuHeight(6)=275 ;================================================================== ;some general use global Global Bigmain ;For create minimize window Global main ;mainwindow handle Global lebarmain=300 Global heightmain=400 ;ClientHeight(Desktop())-30 Global maincanvas ;main canvas handle Global Event Global MouseStillDown ;for drag Global RememberMouseX ;for drag Global RememberMouseY ;for drag Global offset ;offset of menu drawing Global BezaY ;temporary offset during draging of menu Function createmainwindow() Bigmain=CreateWindow(ProjectTitle$,0,-100,heightmain,0,Desktop(),3) main=CreateWindow(ProjectTitle$,0,0,lebarmain,heightmain,Bigmain,17) maincanvas=CreateCanvas(0,0,ClientWidth(main),ClientHeight(main),main) SetGadgetLayout maincanvas,1,1,1,1 SetBuffer CanvasBuffer(maincanvas) SetFont LoadFont(Arial,14,1) ClsColor 0,0,FormBGColor End Function createmainwindow() Repeat event=WaitEvent(1) DrawMaxMenu() Select Event Case $803 If EventSource()=main Then End Case $802 ;size ActivateGadget main Case $801 ;move SetGadgetShape Bigmain,GadgetX(main),-100,heightmain,0 End Select Forever Function DrawMaxMenu() Cls y=2+offset+BezaY For k=1 To TotalMyMenu ;draw caption Color 0,0,CaptionBGColor Rect 2,y+1,lebarmain-10,15 Color 0,0,CaptionFGColor Rect 2,y+1,lebarmain-10,15,0 Text 15,y+2,Mymenu$(k) ;drag tracking If MouseDown(1) And MouseStillDown=0 Then MouseStillDown=1 RememberMouseX=MouseX(maincanvas) RememberMouseY=MouseY(maincanvas) EndIf ;update BezaY for draging show. BezaY is reset when mouseup and the value is added to offset If MouseStillDown=1 And RememberMouseX=MouseX(maincanvas)<>MouseX(maincanvas) And RememberMouseY=MouseY(maincanvas)<>MouseY(maincanvas) Then BezaX=MouseX(maincanvas)-RememberMouseX BezaY=MouseY(maincanvas)-RememberMouseY If offset+Bezay>0 offset=0:BezaY=0 EndIf EndIf If Event=$202 Then ;mouseup MouseStillDown=0 If MouseY(maincanvas)<>RememberMouseY offset=offset+BezaY:BezaY=0 Click=0 Event=0 Else Click=1 EndIf EndIf ;collession caption - only when no drag If k<>TotalMyMenu And click=1 And MouseStillDown=0 And Event=$202 And MouseX(maincanvas)>2 And MouseX(maincanvas)<2+lebarmain-10 And MouseY(maincanvas)>y+1 And MouseY(maincanvas)=0 Then total=y-offset Else total=y+Abs(offset) EndIf ;flip but only if no re offset If offset+total