Mehrere Klicks auf einen Button damit er was macht!
Übersicht

![]() |
ReLeNtLeSSBetreff: Mehrere Klicks auf einen Button damit er was macht! |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() |
||
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist doch ganz einfach! ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Hip Teen hat Folgendes geschrieben: Ganz kurz: WaitEvent wartet auf irgendein Event.
xD |
||
i never finish anyth |
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, vielen dank, werde das mal Testen ![]() |
||
![]() |
ReLeNtLeSS |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
"Select $401" soll wohl "Select WaitEvent( )" heißen. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahh ja, danke nochmal ^^
/Edit: Vielen Vielen Dank es funzt! ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group