Nochmal Problem mit Menü [gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mabox

Betreff: Nochmal Problem mit Menü [gelöst]

BeitragDo, Sep 27, 2007 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab nochmal ein Problem mit dem Menü von Pdd (siehe unten).
Und zwar: Wenn man irgendwohin klickt und dann über einen Button kommt macht es die Buttonaktion. Ich will aber, dass es die Buttonaktion nur macht wenn man wirklich auf den Button klickt. Bis jetzt hab ich mich hauptsächlich mit dem Menü selbst (siehe unten) und nicht mit der dazu verwendeten Library beschäftigt (die ist mir noch zu kompliziert).

Das Menü:
Code: [AUSKLAPPEN]
; Beispiel für die Nutzung der PButtons-lib.

Include "PButtons.bb"

Graphics 800, 600, 32, 2
SetBuffer BackBuffer()

Global MainImage = LoadImage("main.png")
Global menu = 1
Global Timer = CreateTimer(30)
Global menustate = 1

Global Btn_daddln = PB_CreateButton("Jetzt daddln: Hier klicken!!!", 40, 176, 1, 232, 54)
Global Btn_beenden = PB_CreateButton("Zum Beenden hier drücken.", 610, 536, 1, 164, 43, "exit_over.png")
Global Btn_back = PB_CreateButton("Drücke hier, um zurück zu gelangen.", 10, 10, 1, StringWidth("Zurück."), FontHeight())

PB_SetHintFont("Verdana")
PB_SetHintColor(245, 248, 152, 0, 0, 0, 208, 55, 163)

Repeat
   WaitTimer(Timer)
   Cls
   
   Select menustate
      Case 1
         ; Hauptmenü   
            ; Erst alle anderen Buttons Deaktivieren
            PB_DisableAll()
            PB_EnableButton(Btn_daddln)
            PB_EnableButton(Btn_beenden)
            ; Das Menü-Bild malen
            DrawImage MainImage, 0, 0
            If PB_ButtonHit(Btn_daddln) Then menustate = 2
            If PB_ButtonHit(Btn_beenden) Then menu = 0
      Case 2
         ; daddln
            ; Jetzt zuerst alle Buttons deaktivieren, sonst könnte man die Anderen Buttons noch drücken!
            PB_DisableAll()
            PB_EnableButton(Btn_back)
            Cls
            Color 255, 255, 255
            Text 10, 10, "Zurück."
            If PB_ButtonHit(Btn_back) Then menustate = 1
   End Select

   ; Nicht vergessen: Updaten
   PB_Update()   
   
   Flip
Until menu = 0
End


Die Library:
Code: [AUSKLAPPEN]
; PButtons v1.0 by Pdd (C) 2006.
; Mail: pddpms [ÄT] yahoo.de
; Diese Lib darf frei verwendet werden, würde mich aber um einen Credits-Eintrag freuen!

Type TButton
   Field X
   Field Y
   Field name$
   Field ID
   Field Width
   Field Heigth
   Field Hint
   Field Hit
   Field Enabled
   Field OverImage
End Type

Global Button.TButton
Global PB_ButtonHintFont = LoadFont("Verdana")
Dim PB_HintColor(9)
   PB_HintColor(1) = 74
   PB_HintColor(2) = 128
   PB_HintColor(3) = 225
   PB_HintColor(4) = 0
   PB_HintColor(5) = 0
   PB_HintColor(6) = 0
   PB_HintColor(7) = 0
   PB_HintColor(8) = 0
   PB_HintColor(9) = 0
   
; Setzt die Farbe der Hints
; rgb - Farbe des Hintergrunds
; r1g1b1 - Farbe des Rands
; r2g2b2 - Farbe des Textes

Function PB_SetHintColor(r, g, b, r1, g1, b1, r2, g2, b2)
   ; Hintergrund
   PB_HintColor(1) = r
   PB_HintColor(2) = g
   PB_HintColor(3) = b
   ; Rahmen
   PB_HintColor(4) = r1
   PB_HintColor(5) = g1
   PB_HintColor(6) = b1
   ; Text
   PB_HintColor(7) = r2
   PB_HintColor(8) = g2
   PB_HintColor(9) = b2
   
End Function

; Setzt die Schriftart des Hints
; font$ - Schriftart

Function PB_SetHintFont(font$)
   PB_ButtonHintFont = LoadFont(font$)
End Function

; Erstellt einen Button. Liefert die Identität des Buttons zurück.
; hint$ - Hint-Text
; X - X-Position des Buttons
; Y - Y-Position des Buttons
; HintE - Ob der Hint angezeigt werden soll (0 = nein, 1 = ja)
; width - Breite des Buttons
; height - Höhe des Buttons
; OverImage(optional) - Bild, das angezeigt werden soll, wenn man mit der Maus über den Button fährt

Function PB_CreateButton(hint$, X, Y, HintE = 0, width, height, Overimage$ = "")
   Button = New TButton
   Button\ID = Handle(Button)
   Button\name = hint$
   Button\Width = width
   Button\Heigth = height
   Button\X = X
   Button\Y = Y
   Button\Hint = HintE
   Button\Enabled = True
   If Overimage$ <> "" Then
      Button\OverImage = LoadImage(Overimage$)
   EndIf
   Return Handle(Button)
End Function

; Liefert eine 1 zurück, wenn der Button gedrückt wurde. Ansonsten 0.

Function PB_ButtonHit(Btn)
   If Btn <> 10000 Then
      Button = Object.TButton(Btn)
      If Button\Hit = 1 And Button\Enabled = True Then
         Button\Hit = 0
         FlushMouse
         Return True
      Else
         Return False
      EndIf
   EndIf
End Function

; Liefert eine 1 zurück, wenn die Maus über dem Button ist. Ansonsten 0.

Function PB_ButtonOver(Btn)
   If Btn <> 10000 Then
      Button = Object.TButton(Btn)
      If (MouseX() > Button\X) And (MouseX() < (Button\X + Button\Width)) And (MouseY() > Button\Y) And (MouseY() < (Button\Y + Button\Heigth)) And (Button\Enabled = True) Then
         Return True
      Else
         Return False
      EndIf
   EndIf
End Function

; Aktualisiert alles. Dieser Befehl muss immer in jeder Schleife ausgeführt werden!

Function PB_Update()
   For Button = Each TButton
      If (PB_ButtonOver(Button\ID) = True) And (Button\Enabled = True) Then   
            
         If Button\OverImage <> 0 Then
            DrawImage Button\OverImage, Button\X, Button\Y
         EndIf
         
         If Button\Hint = 1 Then
            SetFont PB_ButtonHintFont
            Color PB_HintColor(1), PB_HintColor(2), PB_HintColor(3)   ;Hintergrund
            If (MouseX() + 20 + StringWidth(Button\name) + 10) < 800 Then
               Rect MouseX() + 20, MouseY() + 1, StringWidth(Button\name) + 10, 15, 1
               Color PB_HintColor(4), PB_HintColor(5), PB_HintColor(6) ;Rahmen
               Rect MouseX() + 20, MouseY() + 1, StringWidth(Button\name) + 10, 15, 0
               Color PB_HintColor(7), PB_HintColor(8), PB_HintColor(9) ;Text
               Text MouseX() + 25, MouseY() + 2, Button\Name
            Else
               Rect MouseX() - 5 - (StringWidth(Button\name) + 10) , MouseY() + 1, StringWidth(Button\name) + 10, 15, 1
               Color PB_HintColor(4), PB_HintColor(5), PB_HintColor(6) ;Rahmen
               Rect MouseX() - 5 - (StringWidth(Button\name) + 10), MouseY() + 1, StringWidth(Button\name) + 10, 15, 0
               Color PB_HintColor(7), PB_HintColor(8), PB_HintColor(9) ;Text
               Text MouseX() - (StringWidth(Button\name) + 10), MouseY() + 2, Button\Name
            EndIf            
         EndIf
         
         If MouseHit(1) Then
            FlushMouse
            Button\Hit = 1   
         Else
            Button\Hit = 0
         EndIf   
         FlushMouse
         

      EndIf
   Next
End Function

; Aktualisiert die Eigenschaften eines Buttons. Liefert die Identität des Buttons zurück, diese bleibt aber gleich.
; Parameter siehe PB_CreateButton.

Function PB_UpdateButton(Btn, hint$, X, Y, HintE = 0, width, height, Overimage = 0)
   If Btn <> 10000 Then
      Button = Object.TButton(Btn)
      If hint$ <> "" Then Button\name = hint$
      Button\Width = width
      Button\Heigth = height
      Button\X = X
      Button\Y = Y
      Button\Hint = HintE
      Button\Enabled = True
      If Overimage <> 0 Then
         Button\OverImage = LoadImage(Overimage)
      Else
         Button\OverImage = 0
      EndIf   
      Return Handle(Button)
   EndIf
End Function

; Löscht ALLE Buttons

Function PB_FreeButtons()
   For Button = Each TButton
      Delete Button
   Next
End Function

; Löscht EINEN Button
; Btn - Identität des Buttons

Function PB_FreeButton(Btn)
   Button = Object.TButton(Btn)
   Delete Button
End Function

; Aktiviert einen Button
; Btn - Identität des Buttons

Function PB_EnableButton(Btn)
   If Btn <> 10000 Then
      Button = Object.TButton(Btn)
      Button\Enabled = True
   EndIf
End Function

; Deaktiviert einen Button
; Btn - Identität des Buttons

Function PB_DisableButton(Btn)
   If Btn <> 10000 Then
      Button = Object.TButton(Btn)
      Button\Enabled = False
   EndIf
End Function

; Aktiviert ALLE Buttons

Function PB_EnableAll()
   For Button = Each TButton
      Button\Enabled = True
   Next
End Function

; Deaktiviert ALLE Buttons

Function PB_DisableAll()
   For Button = Each TButton
      Button\Enabled = False
   Next
End Function


Vielen Dank für Hilfe!
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
  • Zuletzt bearbeitet von mabox am Mo, Okt 01, 2007 20:27, insgesamt 3-mal bearbeitet
 

AMD

BeitragDo, Sep 27, 2007 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hi also
du hast ja bestimmt eingebaut wenns collidiert die maus mit dem dings da was auch immer das des ausgeführt wird.
du musst das so machen:

If Imagescollided(.....) and Mousehit(1) then Buttonaktion

also ich hab mir jetzt deinen code gar net angesehn aber^^ auf jeden fall is da des "and Mousehit(1)" wichtig!

MfG
Das Leben ist ein scheiß Spiel hat aber eine saugute Grafik!
PC:
AMD 5200 X2(2x2,6Ghz), 250GB Festplatte, 2048MB Arbeitsspeicher, Nvidia 9800 GTX mit 512MB.....
Bildschrim mit 22 Zoll und 5msk Übertragungszeit......
Mein BaumMap Tutorial:
http://www.blitzforum.de/forum...hp?t=26341

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Sep 28, 2007 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()


While Not KeyHit(1)
   
   mx=MouseX()
   my=MouseY()
   
   Rect 100,100,100,60,0
   Rect 300,100,100,60,0
   
   If MouseHit(1)
      If RectsOverlap(mx,my,1,1,100,100,100,60) Then Text 20,20,"klick"
      If RectsOverlap(mx,my,1,1,300,100,100,60) Then Text 20,20,"klick"
   End If
   
   Flip
   Cls
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

mabox

BeitragFr, Sep 28, 2007 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke der Fehler in der Library ist in diesem Teil:
Code: [AUSKLAPPEN]
Function PB_ButtonHit(Btn)
   If Btn <> 10000 Then
      Button = Object.TButton(Btn)
      If Button\Hit = 1 And  Button\Enabled = True  Then
         Button\Hit = 0
         FlushMouse
         Return True
      Else
         Return False
      EndIf
   EndIf
End Function


Ich habe mittlerweile schon viel ausprobiert aber komm einfach nicht darauf. kann mir das nochmal jemand an diesem Beispiel erläutern/zeigen?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Sep 28, 2007 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Funktion alleine bringt uns sogut wie nichts. Was mir aber auffiel:

Button = Object.TButton(Btn)

sollte in etwa so heissen:

Button.TButton = Object.TButton(Btn)
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

mabox

BeitragFr, Sep 28, 2007 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok Danke! wobei mir das natürich nicht bei meinem eigentlichen Problem weiterhilft..........Etwas weiter oben ist der ganze Code wenn du ihn dir nochmal anschauen willst.

Bitte helft mir nochmal, ich komm wirklich nicht weiter!
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group