OK, war ein Mißverständnis. Teile meines Codes waren aber nun tagelang gepostet und der ts-soft hatte mich nicht verscheucht. Ich dachte einfach nur, da kommt nichts mehr, weil bei meinem Code vielleicht eh alles zu spät ist.
Was ich zum VERZWEIFELN finde, ist, daß es bei PB keine Funktion wie
DeactivateGadget() gibt, damit man im Bedarfsfall die Wahl hat, ob ein Gadget in der Schleife nur einmal durchlaufen wird oder in ständiger Wiederholung. Nur DAHER rührt meine Eventschleife, welche ich nunmehr wieder hier einstelle. Der Vorschlag mit
Code: Alles auswählen
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
stur nach PB-Hilfe-Anleitung brachte mir auch nichts, denn das warf neue Probleme auf: Beim Klicken auf die Tasten kam kein Noten-Sprite mehr auf den Bildschirm und kein Ton mehr aus dem Lautsprecher, weil sich das scheinbar nicht mit winapi-Befehlen verträgt.
Mein Code läuft zwar, aber es gibt Probleme mit dem ComboBoxGadget, denn nachdem ich da da drin die Anzahl der Kreuz-Vorzeichen ausgewählt habe, (bei den b-Vorzeichen bin ich noch gar nicht), muß ich hinterher erstmal jeden Button zweimal klicken, damit der anspricht!
EDIT: Gilt nur für die beiden Buttons, die ich mit WindowMouseX() und WindowMouseY() abfrage!!! Danach ist dann wieder alles erstmal normal, eben so lange, bis wiederum ein Eintrag im ComboBoxGadget ausgewählt wird.
Ich vermute, daß das ganze mit dieser Windows-Queue zusammenhängt, da wird einem in der PB-Hilfe die Formel
zur Abhilfe von Problemen hingeknallt, aber WIE und WO flechtet man das ins Programm ein? Hier ist meine Eventschleife:
Code: Alles auswählen
ButtonGadget(0,680,5,40,40,"#")
ButtonGadget(1,730,5,40,40,"b")
ButtonGadget(2,630,5,40,40,"Clear")
ButtonGadget(9,280,5,40,40,"Vorsp.")
ComboBoxGadget(10,160,15,110,250)
AddGadgetItem(10,-1,"keine Vorzeichen")
AddGadgetItem(10,-1,"1 Kreuz")
AddGadgetItem(10,-1,"2 Kreuze")
AddGadgetItem(10,-1,"3 Kreuze")
AddGadgetItem(10,-1,"4 Kreuze")
AddGadgetItem(10,-1,"5 Kreuze")
AddGadgetItem(10,-1,"6 Kreuze")
AddGadgetItem(10,-1,"7 Kreuze")
AddGadgetItem(10,-1,"1 b")
AddGadgetItem(10,-1,"2 b")
AddGadgetItem(10,-1,"3 b")
AddGadgetItem(10,-1,"4 b")
AddGadgetItem(10,-1,"5 b")
AddGadgetItem(10,-1,"6 b")
AddGadgetItem(10,-1,"7 b")
Repeat
eventID = WindowEvent()
GadgetID = EventGadgetID()
Select GadgetID
Case 0
Case0 = 1
Case1 = 0
EndSelect
If eventID = #WM_LBUTTONDOWN And WindowMouseX() > 630 And WindowMouseX() < 670 And WindowMouseY() > 5 And WindowMouseY() < 45
; reagiert, wenn man Button 2 klickt, = Clear-Funktion
DisplaySprite(118,31,0)
DisplaySprite(118,31,85)
DisplaySprite(119,500,0)
DisplaySprite(119,500,85)
CISCIS = 0
CIS = 0
cis1 = 0
cis2 = 0
cis3 = 0
DISDIS = 0
DIS = 0
dis1 = 0
dis2 = 0
dis3 = 0
.....
EndIf
;Taste C
If Case0 = 1
If eventID = #WM_LBUTTONDOWN And WindowMouseX() > 0 And WindowMouseX() < 17 And WindowMouseY() > 350 And WindowMouseY() < 415
x = x + 32
If CISCIS = 1
CISCIS = 0
CIS = 0
DisplaySprite(104,x-2,84)
PlaySound(30)
Goto cisg
EndIf
DisplaySprite(64,x-2,85)
PlaySound(30)
EndIf
If eventID = #WM_LBUTTONDOWN And WindowMouseX() > 0 And WindowMouseX() < 26 And WindowMouseY() > 415 And WindowMouseY() < 450
x = x + 32
If CISCIS = 1
CISCIS = 0
CIS = 0
DisplaySprite(104,x-2,84)
PlaySound(30)
Goto cisg
EndIf
DisplaySprite(64,x-2,85)
PlaySound(30)
EndIf
EndIf
....
Select GadgetID
Case 1
Case0 = 0
Case1 = 1
EndSelect
If Case1 = 1
If eventID = #WM_LBUTTONDOWN And WindowMouseX() > 16 And WindowMouseX() < 33 And WindowMouseY() > 350 And WindowMouseY() < 415
If DESDES = 1 Or DES = 1
x = x + 32
DisplaySprite(65,x-2,85)
PlaySound(44)
Goto TD
EndIf
DESDES = 1
DES = 1
x = x + 32
DisplaySprite(89,x-2,85)
PlaySound(44)
EndIf
EndIf
......
;Vorspiel-Teil, reagiert, wenn Button 9 geklickt wird:
If eventID = #WM_LBUTTONDOWN And WindowMouseX() > 280 And WindowMouseX() < 320 And WindowMouseY() > 5 And WindowMouseY() < 45
Vorspiel = 1
EndIf
If Vorspiel = 1
If axa = 0
Goto axa
EndIf
PlaySound(axa)
Delay(500)
StopSound(-1)
axa:
If bxa = 0
Goto bxa
EndIf
PlaySound(bxa)
Delay(500)
StopSound(-1)
bxa:
.....
EndIf
If axa = 0 Or bxa = 0
Vorspiel = 0
EndIf
If axa > 0 And bxa > 0
Vorspiel = 0
EndIf
Until eventID = #PB_EventCloseWindow
Ich würde gerne den Vorspielteil über Case 9 aufrufen, aber dann hört das Gedudel ja nicht mehr auf. Genuaso der Clear-Button, welchen ich über Case 2 aufrufen könnte, aber nicht kann, weil dann die Löschfunktion alles neu geschriebene sofort wieder löscht, nur weil es kein DeactivateGadget() gibt. Einmal geschaltet, immer geschaltet und wenn ich
Code: Alles auswählen
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_Gadget
Select EventGadgetID()
verwende, wirft das auch sofort neue Probleme auf.
Ich bin echt frustriert.
PB42