Ive decided to start my own thread instead of continuing to hijack Aaron's. Currently windows can Close, Minimize and Lock in place and the selected window is highlighted. I'm planning to add more to it Once I get more time.
Update 19/11/07:
* Can scroll Through Windows Using Tab
* Can Create a Fixed Window with No Bar
No Media Required
`Set up Game Requirements
Set Display Mode 1280,1024,32
Sync On `: Sync Rate 60
#Constant True 1
#Constant False 0
Type Window
Name as String `Window Name
X as Integer `X cord of Window
Y as Integer `Y Cord of Window
Width as Integer `Width of the Window
Height as Integer `Height of the Window Body
Hidden as Boolean `Is the Window Hidden
Minimized as Boolean `Is the Window Minimized
Bar as Integer `Sprite/Image Number for Window Bar
Body as Integer `Sprite/Image Number for Window Body
CloseButton as Integer `Sprite/Image Number for Close Button
MinButton as Integer `Sprite/Image Number for Minimize Button
LockButton as Integer `Sprite/Image Number for Lock Button
Locked as Boolean `Stores wether the Window is locked/UnLocked
Dynamic as Boolean `Sets if the Window is able to be Moved etc by the Player
EndType : Dim Window(-1) as Window
`Make Sphere
AutoCam On
Make Object Sphere 1,5
CreateWindow("Techniques",400,600,0,0, True)
CreateWindow("Items",300,500,0,0, True)
CreateWindow("Character Profile",500,300,400,400, True)
CreateWindow("Map",500,300,0,800,True)
CreateWindow("Attacks",Screen Width(),200,0,800,False)
Do
UpdateMouse()
UpdateWindows()
Set Cursor 0,0 : Print "FPS:",Screen FPS()
Sync
Loop
Function CreateWindow(WindowName as String, Width as Integer, Height as Integer, X as Integer , Y as Integer , Dynamic as Boolean)
`Create a New Window in the Array
Array Insert at Bottom Window()
aWin as Integer : aWin=Array Count(Window())
`Initialize Window Variables
Window(aWin).Name=WindowName
Window(aWin).Hidden=0 : Window(aWin).Minimized=0
Window(aWin).X=X : Window(aWin).Y=Y
Window(aWin).Height=Height : Window(aWin).Width=Width
Window(aWin).Dynamic=Dynamic
`Get Image Numbers For Parts of our Window
Window(aWin).Bar=GetIDNumber() : Window(aWin).Body=GetIDNumber()
Window(aWin).CloseButton=GetIDNumber() : Window(aWin).MinButton=GetIDNumber()
Window(aWin).LockButton=GetIDNumber()
`Draw Our Window
Create Bitmap 1, Screen Width(), Screen Height()
Set Current Bitmap 1
Set Text Font "Copperplate Gothic Light" : Set Text to Bold : Set Text Size 20
Ink RGB(2,2,2),1 : Box 0,0,Width,Height+30
Ink RGB(128,128,128),1 : Box 1,30+2,Width-1,Height+30-1
Ink RGB(1,1,1),1 : Box 2,30+3,Width-2,Height+30-2
Ink RGB(128,128,128),1 : Box 1,1,Width-1,30
Ink RGB(2,2,2),1 : Box 2,2,Width-2,30-1
Ink RGB(128,128,128),1 : Box (Width-67),6,(Width-51),20
Ink RGB(2,2,2),1 : Box (Width-66),7,(Width-52),19
Ink RGB(128,128,128),1 : Box (Width-47),6,(Width-31),20
Ink RGB(2,2,2),1 : Box (Width-46),7,(Width-32),19
Ink RGB(128,128,128),1 : Box (Width-27),6,(Width-11),20
Ink RGB(2,2,2),1 : Box (Width-26),7,(Width-12),19
Set Text Font "Copperplate Gothic Light" : Set Text to Bold : Set Text Size 12
Ink RGB(156,156,156),1 : Center Text (Width-20),6,"x"
Ink RGB(156,156,156),1 : Center Text (Width-39),6,"v"
circle (Width-60),11,2 : Box (Width-63),12,(Width-56),17
Set Text Font "Copperplate Gothic Light" : Set Text to Bold : Set Text Size 14
Ink RGB(156,156,156),1 : Center Text (Width/2),6, WindowName
`Convert The Parts of our Windows to Sprites
Get Image Window(aWin).Body,0,30,Width,Height+30,1
SetColorAlpha(Window(aWin).Body,"1,1,1",150)
Sprite Window(aWin).Body,X,Y+27,Window(aWin).Body
Get Image Window(aWin).Bar,0,0,Width,30,1
Sprite Window(aWin).Bar,X,Y,Window(aWin).Bar
Get Image Window(aWin).LockButton, (Width-67),6,(Width-51),20,1
Sprite Window(aWin).LockButton,X+(Width-67),Y+6,Window(aWin).LockButton
Get Image Window(aWin).MinButton,(Width-47),6,(Width-31),20,1
Sprite Window(aWin).MinButton,X+(Width-47),Y+6,Window(aWin).MinButton
Get Image Window(aWin).CloseButton,(Width-27),6,(Width-11),20,1
Sprite Window(aWin).CloseButton,X+(Width-27),Y+6,Window(aWin).CloseButton
Set Current Bitmap 0
If Window(aWin).Dynamic=0
Hide Sprite Window(aWin).Bar
Hide Sprite Window(aWin).MinButton
Hide Sprite Window(aWin).CloseButton
Hide Sprite Window(aWin).LockButton
EndIf
EndFunction
Function UpdateWindows()
`Change Window Priority If New WindowBar Is Pressed
For aWin=Array Count(Window()) to 0 step -1
If Sprite Collision(Window(aWin).Bar,SPMouse)=1 and ButtonState="LeftPressed" and Window(aWin).Dynamic=1
For bWin=aWin to Array Count(Window())
If aWin<>bWin
If Sprite Collision(Window(bWin).Body,SPMouse)=1 and Sprite Visible(Window(bWin).Body)=1
goto ExitLoop
EndIF
EndIf
Next bWin
SetWindowtoTop(aWin) : goto ExitLoop
EndIf
Next aWin
ExitLoop:
`Scroll Through Windows using Tab Key
if KeyState(15) = 1 then CurrentTab=1
if KeyState(15) = 0 then CurrentTab=0
Set Cursor 0,20 : print KeyState(15)
If LastTab=1 and CurrentTab=0 then SetWindowtoTop(0)
LastTab=CurrentTab
`Get the Top Window
Local TopWindow as Integer : TopWindow = Array Count(Window())
If Window(TopWindow).Dynamic=1
`Move Top WindowBar when Dragged
If Sprite Collision(Window(TopWindow).Bar,SPMouse)=1 and Window(TopWindow).Locked = 0
If ButtonState="LeftPressed"
Global DistanceX as Integer : DistanceX=Window(TopWindow).X-Mousex()
Global DistanceY as Integer : DistanceY=Window(TopWindow).Y-Mousey()
EndIf
If ButtonState="LeftHeld"
Window(TopWindow).X = Mousex()+ DistanceX
Window(TopWindow).Y = Mousey()+ DistanceY
EndIf
`Keep Window Bar On Screen
If Window(TopWindow).X<0 then Window(TopWindow).X=0
If Window(TopWindow).Y<0 then Window(TopWindow).Y=0
If Window(TopWindow).X+Window(TopWindow).Width >Screen Width() then Window(TopWindow).X=Screen Width()-Window(TopWindow).Width
If Window(TopWindow).Y+30>Screen Height() then Window(TopWindow).Y=Screen Height()-30
`Update Window Sprites
Sprite Window(TopWindow).Bar,Window(TopWindow).X,Window(TopWindow).Y,Window(TopWindow).Bar
Sprite Window(TopWindow).Body,Window(TopWindow).X,Window(TopWindow).Y+27,Window(TopWindow).Body
Sprite Window(TopWindow).MinButton,Window(TopWindow).X+(Window(TopWindow).Width-47),Window(TopWindow).Y+6,Window(TopWindow).MinButton
Sprite Window(TopWindow).CloseButton,Window(TopWindow).X+(Window(TopWindow).Width-27),Window(TopWindow).Y+6,Window(TopWindow).CloseButton
Sprite Window(TopWindow).LockButton,Window(TopWindow).X+(Window(TopWindow).Width-67),Window(TopWindow).Y+6,Window(TopWindow).LockButton
EndIf
If Window(TopWindow).Locked=0
`Detect the Minimize Button
If Sprite Collision(Window(TopWindow).MinButton,SPMouse) and ButtonState="LeftPressed"
If Sprite Visible(Window(TopWindow).Body)=1
Hide Sprite Window(TopWindow).Body
Else
Show Sprite Window(TopWindow).Body
EndIf
EndIf
`Detect the Close Button
If Sprite Collision(Window(TopWindow).CloseButton,SPMouse) and ButtonState="LeftPressed"
Hide Sprite Window(TopWindow).Bar
Hide Sprite Window(TopWindow).Body
Hide Sprite Window(TopWindow).MinButton
Hide Sprite Window(TopWindow).CloseButton
Hide Sprite Window(TopWindow).LockButton
EndIf
EndIf
`Detect the lock Button
If Sprite Collision(Window(TopWindow).LockButton,SPMouse) and ButtonState="LeftPressed"
If Window(TopWindow).Locked=1
Window(TopWindow).Locked=0
DistanceX=Window(TopWindow).X-Mousex()
DistanceY=Window(TopWindow).Y-Mousey()
Set Sprite Diffuse Window(TopWindow).LockButton, 255,255,255
Else
Window(TopWindow).Locked=1
Set Sprite Diffuse Window(TopWindow).LockButton, 255, 0, 0
EndIf
EndIf
EndIf
EndFunction
Function SetWindowtoTop(aWindow as Integer)
`Change Old Selected Window to Grey
Set Sprite Diffuse Window(Array Count(Window())).Bar, 255,255, 255
Set Sprite Diffuse Window(Array Count(Window())).Body, 255,255, 255
Local TempWin as Window
TempWin=Window(aWindow)
Array Delete Element Window(),aWindow
Array Insert At Bottom Window()
BottomWin=Array Count(Window())
Window(BottomWin)=TempWin
`Change New Selected Window to Green
Set Sprite Diffuse Window(Array Count(Window())).Bar,0, 255,0
Set Sprite Diffuse Window(Array Count(Window())).Body, 0, 255, 0
`Set Window Priorities Based on Array Position
For aWin=0 to Array Count(Window())
Set Sprite Priority Window(aWin).Bar ,(aWin+1)*100
Set Sprite Priority Window(aWin).Body ,(aWin+1)*100
Set Sprite Priority Window(aWin).MinButton ,(aWin+1.1)*100
Set Sprite Priority Window(aWin).CloseButton ,(aWin+1.1)*100
Set Sprite Priority Window(aWin).LockButton ,(aWin+1.1)*100
Next aWin
EndFunction
Function GetIDNumber()
` Intialize GetIDNumber()
If GetIDInit=0
Dim ID(0) as Integer
Global GetIDInit as Boolean : GetIDInit=1
EndIf
`Safety Check
If Array Count(ID())>10000
Exit Prompt "You have reached The maximum amount of ID's allowed", "GetIDNumber Error" : End
EndIf
`Pick a Random ID Number
Local IDNum as Integer : IDNum =(Rnd(10000)+1)
Local Unique as Boolean
`Check if the ID number is being used if so pick another new ID
Repeat
If Unique=0
Unique=1
For aID=1 to Array Count(ID())
If ID(aID) = IDNum then IDNum=(Rnd(10000)+1) : Unique=0
Next aID
EndIf
Until Unique=1
`If the ID Number is free to use then assign it to the ID Array
Array Insert at Bottom ID()
ID(Array Count(ID())) = IDNum
EndFunction IDNum
Function UpdateMouse()
`Initialize Mouse
If MouseInit=0
`Set Up Mouse Detection
Global SPMouse as Integer : SPMouse = GetIDNumber()
Get Image SPMouse,0,0,1,1 : Sprite SPMouse,Mousex(),Mousey(),SPMouse : Hide Sprite SPMouse
Global LastTab as Integer
Global LastMClick as Integer
Global MClick as Integer
Global ButtonState as String
Global MousePosX as Integer
Global MousePosY as Integer
Global MouseInit as Boolean : MouseInit=1
EndIf
LastMClick=MClick
MClick=MouseClick()
`Mouse is not held Down
If MClick=0 and LastMClick=0 then ButtonState="NotPressed"
`LeftMouse is held Down
If MClick=1 and LastMClick=0 then ButtonState="LeftPressed"
`LeftMouse has just Been Pressed
If MClick=1 and LastMClick=1 then ButtonState="LeftHeld"
`LeftMouse has just been Lifted
If MClick=0 and LastMClick=1 then ButtonState="LeftLifted"
`RightMouse has just been Pressed
If MClick=2 and LastMClick=0 then ButtonState="RightPressed"
`RightMouse is held Down
If MClick=2 and LastMClick=2 then ButtonState="RightHeld"
`RightMouse has just been Lifted
If MClick=0 and LastMClick=2 then ButtonState="RightLifted"
`Update Mouse Position
Sprite SPMouse,MousePosX,MousePosY,SPMouse
MousePosX = Mousex()
MousePosY = Mousey()
Endfunction
Function SetColorAlpha(ImageNumber as Integer, Color as String, Transparency as Byte)
Make Memblock from Image 1,ImageNumber
Local Width as Dword : Width = Memblock Dword(1,0)
Local Height as Dword : Height = Memblock Dword(1,4)
Local Depth as Dword : Depth = Memblock Dword(1,8)
Local PixelPointer as Integer PixelPointer=12
For Y=1 to Height
For X=1 to Width
PixelColor as String
PixelColor=Str$(Memblock Byte(1 , PixelPointer+2)) + "," + Str$(Memblock Byte(1 , PixelPointer+1)) + "," + Str$(Memblock Byte(1 , PixelPointer))
If PixelColor=Color
Write Memblock Byte 1, PixelPointer+3,Transparency
EndIf
PixelPointer=PixelPointer+4
Next X
Next Y
Delete Image ImageNumber
Make Image From Memblock ImageNumber,1
EndFunction
Better to be dead, than to live your life afraid.