Kleines Problem mit eigener GUI [ERLEDIGT]

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

nX^

Betreff: Kleines Problem mit eigener GUI [ERLEDIGT]

BeitragMi, Aug 01, 2012 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin dabei ein bisschen am rum basteln an einer kleinen eigenen InGame GUI. Das hier ist bestimmt mein dritter Anlauf und ich komme auf keinen grünen Zweig... Ich erstelle mir 2 Fenster und will dass wenn ich auf ein Fenster klicke das dies Aktiv ist und die darunterliegenden Fenster nicht aktiv werden können für spätere Drag and Drop Optionen... Der Code ist etwas kurz und die Fenster bestehen nur aus weißen Rechtecken... Wie gesagt mein dritter Anlauf...

Ich hoffe ich programmier das nicht zu schwer bzw denke zu kompliziert um die Fenster zu handeln...

Code: [AUSKLAPPEN]
SuperStrict

Graphics 1024,768,0,60

Type TGUI
   Field PosX:Short
   Field PosY:Short
   Field Caption:String
   
   Field Width:Short
   Field Height:Short
   
   Global List:TList
   Global Count:Int
   
   Global MX:Short
   Global MY:Short
   Global MH1:Short

   Method New()
      If List = Null Then
         List = New TList
      EndIf
      
      Count = Count + 1
      List.AddFirst(Self)
      
      DebugLog "Neuer Eintrag in TGUI"
   End Method
   
   Method Destroy()
      List.Remove(Self)
      Count = Count - 1
   End Method

   Function UpdateGUI()
      Local gl:TGUI
      
      MX = VirtualMouseX()
      MY = VirtualMouseY()
      MH1 = MouseHit(1)
      
      For gl = EachIn List
         gl.Draw()
         gl.Update()
      Next
      
      TWindow.DragWindow()
   End Function
   
   Method Draw() Abstract
   Method Update() Abstract
End Type

Type TWindow Extends TGUI
   Field Parent:TList
   
   Global ActiveWindow:TWindow
      
   Function Create:TWindow(Caption:String, PosX:Short, PosY:Short, Width:Short, Height:Short)
      Local cw:TWindow
      
      cw = New TWindow
      cw.Caption = Caption
      cw.PosX = PosX
      cw.PosY = PosY
      cw.Width = Width
      cw.Height = Height
      cw.Parent = New TList
      
      ActiveWindow =  cw
      
      Return cw
   End Function

   Method Destroy()
      List.Remove(Self)
   End Method

   Method Draw()
      DrawRect Self.PosX, Self.PosY, Self.Width, Self.Height
   End Method

   Method Update()
   End Method
   
   Function DragWindow()
      Local dw:TWindow
      
      For dw = EachIn TGUI.List
         If ActiveWindow = dw Then
            If MouseIn(dw.PosX, dw.PosY, dw.Width, dw.Height) Then
               If MH1 Then DebugLog dw.Caption + " wurde geklickt. -  Ich war Aktiv."
               ActiveWindow = dw
            EndIf
         Else
            If MouseIn(dw.PosX, dw.PosY, dw.Width, dw.Height) Then
               If Not MouseIn(ActiveWindow.PosX, ActiveWindow.PosY, ActiveWindow.Width, ActiveWindow.Height) Then
                  If MH1 Then DebugLog dw.Caption + " wurde geklickt - Ich wurde aktiviert."
                  ActiveWindow = dw
               EndIf
            EndIf
         EndIf
      Next
   End Function
End Type

Global t1:TWindow = TWindow.Create("Fenster 1",100,100,400,200)
Global t2:TWindow = TWindow.Create("Fenster 2",300,200,400,200)
Repeat
   Cls
   
   TGUI.UpdateGUI()
   
   Flip
Until KeyHit(KEY_ESCAPE)

Function MouseIn:Byte(PosX:Short, PosY:Short, Width:Short, Height:Short)
   If TGUI.MX > PosX Then
      If TGUI.MX < Width Then
         If TGUI.MY > PosY Then
            If TGUI.MY < Height Then
               Return 1
            EndIf
         EndIf
      EndIf
   EndIf
End Function
   


EDIT: Meine anderen Versuche hatte ich auf die Listensortierung gestützt, sprich: Aktives Fenster nach an oberste stelle der Liste aber trotzdem hab ich da auch massive Probleme...

EDIT2: Im Chat wurde mir geholfen. Ein einfaches Exit aus der Schleife wo ich dass aktive Fenster definiere reicht völlig aus ^^

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group