Mehrere Klicks auf einen Button damit er was macht!

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

ReLeNtLeSS

Betreff: Mehrere Klicks auf einen Button damit er was macht!

BeitragDo, Okt 04, 2007 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
heyho

ich hab bei meien Plus anwendungen immer wieder das problem das ich erst 3-4mal auf einen button klicken muss damit überhaupt was passiert. woran liegt das?

Code: [AUSKLAPPEN]


Repeat

  endeereigniss=WaitEvent()
  If endeereigniss=$401 And EventSource()=endebutton$ Then End

  verbindenergeigniss=WaitEvent()
  If verbindenergeigniss=$401 And EventSource()=verbindenbutton$ Then
  join$=JoinNetGame(TextFieldText(chatname$),TextFieldText(hostipfe$))
  If join$=0 Then Print "Verbindung nicht erfolgreich!" Else Print "Verbindung erfolgreich!"
  EndIf

  endeereigniss=WaitEvent()
  If endeereigniss=$401 And EventSource()=endebutton1$ Then End

Forever

Hip Teen

BeitragDo, Okt 04, 2007 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil du mehrfach WaitEvent() benutzt. Entweder du hast nur einmal im Code WaitEvent() stehen oder benutzt PeekEvent() (weniger zu empfehlen)
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

ChristianK

BeitragDo, Okt 04, 2007 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten machst du es mit Select/Case:

Code: [AUSKLAPPEN]
Select WaitEvent( )

   Case $401
      Select EventSource( )

         Case endbutton
            End

      End Select

   Case ...

   Case ...

End Select

Und warum speicherst du das Gadget "endbutton" in einer String-Variable? Du solltest auf jeden Fall Integer verwenden.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

ReLeNtLeSS

BeitragDo, Okt 04, 2007 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hip Teen hat Folgendes geschrieben:
Weil du mehrfach WaitEvent() benutzt. Entweder du hast nur einmal im Code WaitEvent() stehen oder benutzt PeekEvent() (weniger zu empfehlen)


Wenn ich mehrere Events hab dann brauch ich aber mehr Waitevents, logisch oder?

@ ProGamer.Coder

Werde das mal testen, wenn mir dann was misslingt, melde ich mich nochmal! Very Happy

ReLeNtLeSS

BeitragDo, Okt 04, 2007 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm.... mit case check ich nich ganz richtig, ich habs versucht, allerdings funzt es nicht:

Code: [AUSKLAPPEN]

Repeat

  Select WaitEvent()
  Case $401
   Select EventSource()
    Case endebutton
     End
  End Select

   Case $401
    Select EventSource()
      Case verbindenbutton
        Case join$=JoinNetGame(TextFieldText(chatname$),TextFieldText(hostipfe$))
          Select join$=0 
             Case SetStatusText(fenster2,label5$) 
               Case SetStatusText(fenster2,label4$)
                  Case clientplayer=CreateNetPlayer(Client$)
                    Select clientplayer=0
                     Case Print "Anmeldung fehlgeschlagen!" Delay 200 End
                    Case AddTextAreaText empfangfenster$,"Angemeldet als:" + Client$
                  Case HideGadget fenster1
    End Select
    End Select

      Case $401
  Select EventSource()
        Case EventSource()
           Case endebutton1
             End

 Case $401
  Select EventSource()
   Case AddTextAreaText empfangfenster$,Client$ + ":" + Chr$(13)+Chr$(10) +TextFieldText(chatfenster$) + Chr$(13)+Chr$(10) + Chr$(13)+Chr$(10)
  End Select

End Select

Forever
 

ChristianK

BeitragDo, Okt 04, 2007 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das "Case $401" darf nur einmal auftauchen:

Code: [AUSKLAPPEN]
Repeat

   Select WaitEvent()

      Case $401
         Select EventSource()

            Case endebutton
               End

            Case verbindenbutton
               join$=JoinNetGame(TextFieldText(chatname$),TextFieldText(hostipfe$))            

         End Select

   End Select

   [...]

So muss es aussehen. Und was soll das hier eigentlich bewirken:

Code: [AUSKLAPPEN]
          Select join$=0
             Case SetStatusText(fenster2,label5$)
               Case SetStatusText(fenster2,label4$)
                  Case clientplayer=CreateNetPlayer(Client$)
                    Select clientplayer=0
                     Case Print "Anmeldung fehlgeschlagen!" Delay 200 End
                    Case AddTextAreaText empfangfenster$,"Angemeldet als:" + Client$
                  Case HideGadget fenster1
    End Select
    End Select

Weißt du überhaupt, wie Select und Case funktionieren?
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

Dreamora

BeitragDo, Okt 04, 2007 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ReLeNtLeSS hat Folgendes geschrieben:
Hip Teen hat Folgendes geschrieben:
Weil du mehrfach WaitEvent() benutzt. Entweder du hast nur einmal im Code WaitEvent() stehen oder benutzt PeekEvent() (weniger zu empfehlen)


Wenn ich mehrere Events hab dann brauch ich aber mehr Waitevents, logisch oder?


Wenn du das glaubst fehlt dir leider noch das Grundverständnis wie eventbasierende Programme aussehen müssen.

Eventbasierend ist extra dazu da, dass du nicht 100 einzelne Abfragen machen musst wie bei "Keydown" etc.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

ReLeNtLeSS

BeitragDo, Okt 04, 2007 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
ProGamer.Coder hat Folgendes geschrieben:

So muss es aussehen. Und was soll das hier eigentlich bewirken:

Code: [AUSKLAPPEN]
          Select join$=0
             Case SetStatusText(fenster2,label5$)
               Case SetStatusText(fenster2,label4$)
                  Case clientplayer=CreateNetPlayer(Client$)
                    Select clientplayer=0
                     Case Print "Anmeldung fehlgeschlagen!" Delay 200 End
                    Case AddTextAreaText empfangfenster$,"Angemeldet als:" + Client$
                  Case HideGadget fenster1
    End Select
    End Select

Weißt du überhaupt, wie Select und Case funktionieren?


Nope, das hab ich noch nie richtig verstanden, ich habs immer lieber ein wenig komplizierter gemacht^^
 

Dreamora

BeitragDo, Okt 04, 2007 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann mach am besten Mal Robs Blitzbasic Kurs 2, Teil 1-6

Select Case EndSelect ist eigentlich nichts anderes als eine kürzere schreibweise von if elseif elseif elseif elseif elseif end ... jedes case gäbe ein elseif
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
  • Zuletzt bearbeitet von Dreamora am Fr, Okt 05, 2007 11:11, insgesamt einmal bearbeitet

Hip Teen

BeitragFr, Okt 05, 2007 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast wohl nicht ganz verstanden, was WaitEvent macht. Ganz kurz: WaitEvent wartet auf irgendein Event. Ob du ein Button drückst, das Fenster verschiebst oder etwas in ein Textfeld eingibst, ist egal, es wartet auf ein Event. Wenn so ein Event kommt, gibt es das Event anhand einer ID zurück, z.B. $401, wenn auf einem Gadget was passiert ist (z.B. ein Button gedrückt wurde). Soweit zur Theorie. Die Praxis sieht so aus: Du setzt an eine Stelle WaitEvent und speicherst den Rückgabewert. Dann fragst du den Wert für alle Möglichkeiten ab, also ob das Fenster verschoben wurde oder ein Button gedrückt wurde. Dann führst du alles damit verbunde aus, also z.B. führst du die Aktion die hinter dem OK steht aus. Und wenn das gemacht ist wartest du wieder auf ein Event und das Spiel beginnt von vorne. Benutzt du aber öfter im Programm WaitEvent und fragst immer nur ein Event ab, dann musst du eventuell mehrmals auf einen Button drücken damit was passiert, je nachdem an welcher Stelle im Code du dich befindest. Dazu ein kleines Beispiel:
Code: [AUSKLAPPEN]
event = WaitEvent()
If event = $803 Then End
event = WaitEvent()
If event = $803 Then Notify "Du hast auf den Button gedrückt"
event = WaitEvent()
If event = $801 Then Notify "Du hast das Fenster bewegt"

So, sagen wir mal, in dem Beispiel verschiebst du als erstes das Fenster. Du löst ein Event aus, also geht das Programm zum ersten If. Da du aber nicht das Fenster geschlossen hast, passiert nichts und das Programm geht zum nächsten WaitEvent. Jetzt müsstest du 3 mal auf das X klicken, bis sich das Programm beendet.

Ich hoffe es ist dir jetzt klar wie es funktioniert...
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"

ReLeNtLeSS

BeitragFr, Okt 05, 2007 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, ich wusste schon das es an waitevent() liegen muss, da es ja eben wartet.

aber ich habe das buch "Spiele Programmieren mit BB" und habe das GUI Kapitel durch. Nur leider wird da halt nich mit mehreren events gearbeitet.

Ich hab auch mal mit robs bb kurs angefangen. den finde ich persönlich aber mist. Das Buch ist 100mal besser!

Case und Select checke ich immer noch nich, jedenfalls nich in diesem zusammenhang. mir bleibt wohl nix andres möglich, als 4mal auf den button zu klicken!
 

ChristianK

BeitragFr, Okt 05, 2007 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist doch ganz einfach! Smile

So kann man es schreiben ( schlecht ):

Code: [AUSKLAPPEN]
If event = blablub Then
   [...]
End If

If event = blubbla Then
   [...]
End If

If event = blabla Then
   [...]
End If

If event = blubblub Then
   [...]
End If

So kann man es auch schreiben ( nicht ganz so schlecht ):

Code: [AUSKLAPPEN]
If event = blablub Then
   [...]

   Else If event = blubbla Then
      [...]

   Else If event = blabla Then
      [...]
      
   Else If event = blubblub Then
      [...]

End If

Oder so ( gut ):

Code: [AUSKLAPPEN]
Select event

   Case blablub
      [...]
   
   Case blubbla
      [...]
   
   Case blabla
      [...]
   
   Case blubblub
      [...]

End Select
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

0penguin0

BeitragFr, Okt 05, 2007 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich auch noch mal was sagen darf:
mit keydown(), keyhit(), ect. fragst du immer ab, OB etwas passiert ist. wenn du also mehrere verschiedene sachen wissen willst, musst du mehrere abfragen machen. mit waitevent() fragst du aber ab, WAS passiert ist. und wenn du mal weisst, WAS passiert ist, dann sollte der rest kein problem mehr sein Smile

Hip Teen hat Folgendes geschrieben:
Ganz kurz: WaitEvent wartet auf irgendein Event.

xD
i never finish anyth

ReLeNtLeSS

BeitragFr, Okt 05, 2007 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
achsoooo *koppauftischplatte*

das bedeutet:

Code: [AUSKLAPPEN]

Select $401

 case eventsource()=endbutton1 end

 case eventsource()=verbindenbutton (then ... die aktionen eben)

 case eventsource()=abesendenbutton (then... die aktionen eben)


Wollt mir jetz nich meinen Code kaputt machen, weswegen ich ers nochmal frage Wink
 

ChristianK

BeitragFr, Okt 05, 2007 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, bei EventSource ist es doch das Gleiche ( obwohl dein Code auch funktionieren sollte, aber mit Select/Case ist es übersichtlicher ).

Code: [AUSKLAPPEN]
Select $401

   Select EventSource( )

      Case endbutton1 End

      Case verbindenbutton (then ... die aktionen eben)

      Case abesendenbutton (then... die aktionen eben)

   End Select

End Select
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

ReLeNtLeSS

BeitragFr, Okt 05, 2007 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, vielen dank, werde das mal Testen Wink Denke ich bekommen das jetzt hin...

ReLeNtLeSS

BeitragMo, Okt 08, 2007 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Moah, ich glaub ich echt ich spinne: Habe das jetz so angeordnet wie im Beispiel, doch BB gibt nen Error von wegen "Expecting Case, Default or End Select".... ICh weis nich was da fehlen soll?

Code: [AUSKLAPPEN]
Repeat

  Select $401

      Select EventSource()

          Case endebutton1 End
         
          Case endebutton End

          Case verbindenbutton join$=JoinNetGame(TextFieldText(chatname$),TextFieldText(hostipfe$))
               If join$=1 Then
                 SetStatusText(fenster2,label4$)
                 Else
                 SetStatusText(fenster2,label5$)
               EndIf
               clientplayer=CreateNetPlayer(Client$)
               If clientplayer=0 Then
                 Print "Anmeldung fehlgeschlagen!" Delay 300 End
                 Else
                 AddTextAreaText empfangfenster,"Angemeldet als:" + Client$
               EndIf
               HideGadget fenster 1

          Case absendenbu AddTextAreaText empfangfenster,Client$ + ":" + Chr$(13)+Chr$(10) +TextFieldText(chatfenster$) + Chr$(13)+Chr$(10) + Chr$(13)+Chr$(10)
                          AddTextAreaText empfangfenster1,TextAreaText(chatfenster$)

      End Select

   End Select

Forever
 

ChristianK

BeitragMo, Okt 08, 2007 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
"Select $401" soll wohl "Select WaitEvent( )" heißen. Wink
Und dann schreibst du unter dieses Select "Case $401" und den Rest darunter. Das bedeutet dann soviel wie: Wenn WaitEvent $401 ist, dann führe ... aus.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

ReLeNtLeSS

BeitragMo, Okt 08, 2007 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh ja, danke nochmal ^^

/Edit: Vielen Vielen Dank es funzt!


Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group