CatchSound() vor MessageRequester?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

CatchSound() vor MessageRequester?

Beitrag von by night »

Hallo zusammen,

Ich habe mich einige Zeit mit den Help Files aus PureBasic beschäftigt und einiges ausprobiert. Folgendes möchte nicht ganz funktionieren. Code:

Code: Alles auswählen

If MessageRequester("Hallo", "Möchten Sie den neuen Track von **** hören?", #PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
MessageRequester("Ja!", "Sie haben sich für den neuen Track von **** entschieden" +  Chr(10) + "Bitte bestätigen Sie mit OK!")
InitSound()
LoadSound(0,"c:\hate.wav")
PlaySound(0,1)
MessageRequester("Glückwunsch", "Sie können nun den neuen Track von **** hören!")
Delay(153000)
Else 
MessageRequester("Nein!", "Sie haben sich gegen den neuen Track von **** entschieden!")
EndIf
Soweit. Doch jetzt möchte ich noch per CatchSound() alles in eine .exe packen. Ich habe es so versucht:

Code: Alles auswählen

CatchSound(0, ?Music)
End
DataSection
Music: IncludeBinary "c:\hate.wav"

If MessageRequester("Hallo", "Möchten Sie den neuen Track von **** hören?", #PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
MessageRequester("Ja!", "Sie haben sich für den neuen Track von **** entschieden" +  Chr(10) + "Bitte bestätigen Sie mit OK!")
InitSound()
LoadSound(0,"c:\hate.wav")
PlaySound(0,1)
MessageRequester("Glückwunsch", "Sie können nun den neuen Track von **** hören!")
Delay(153000)
Else 
MessageRequester("Nein!", "Sie haben sich gegen den neuen Track von **** entschieden!")
EndIf
Doch das scheint nicht ganz zu klappen. Warum? :)



MfG
PureBasic v4.00 (Windows - x86)
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

weil du da "end" stehen hast.
dann beendet sich doch dein programm direkt in der 2. zeile
ich habs mir jetzt garnihct weiter durchgelesen

Edit: hier

Code: Alles auswählen

InitSound()
CatchSound(0, ?Music)

If MessageRequester("Hallo", "Möchten Sie den neuen Track von **** hören?", #PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
  MessageRequester("Ja!", "Sie haben sich für den neuen Track von **** entschieden" +  Chr(10) + "Bitte bestätigen Sie mit OK!")
  PlaySound(0,1)
  MessageRequester("Glückwunsch", "Sie hören nun den neuen Track von **** !" + Chr(10) + "Mit 'OK' beenden Sie die Wiedergabe")
Else
  MessageRequester("Nein!", "Sie haben sich gegen den neuen Track von **** entschieden!")
EndIf

End

DataSection
  Music: IncludeBinary "c:\hate.wav"
EndDataSection 

Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

Danke. Klappt :)
PureBasic v4.00 (Windows - x86)
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

Noch eine Frage: Wie kann ich Bilder in ein Fenster einbinden? Die Hilfe von PB bringt mich nicht weiter, weil ich nicht weiß wie der Befehl heißt.
PureBasic v4.00 (Windows - x86)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ImageGadget.
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

Code: Alles auswählen

If OpenWindow(0, 400, 400, 400, 200, "Was möchten Sie hören?", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 260, 50, 100, 70, "Band XYZ")
ButtonGadget(2, 30, 50, 100, 70, "Band ABC")
EndIf

Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow 
Quit = 1
EndIf
Until Quit=1
EndIf
End
Ich kriege es nichts ganz hin, 2 Lieder in eine .exe einzubinden. Ich hatte es anfangs so versucht:

Code: Alles auswählen

If OpenWindow(0, 400, 400, 400, 200, "Was möchten Sie hören?", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 260, 50, 100, 70, "Band XYZ")
ButtonGadget(2, 30, 50, 100, 70, "Band ABC")
EndIf

Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow 
Quit = 1
EndIf
Until Quit=1
EndIf
End

InitSound()
CatchSound(0, ?Music1)
DataSection
Music1: IncludeBinary "c:\date.wav"
EndDataSection 

InitSound()
CatchSound(0, ?Music2)
DataSection
Music2: IncludeBinary "c:\rammstein.wav"
EndDataSection 
Doch dann erscheint eine schwerwiegende Fehlermeldung. Wie ist es also möglich 2 Lieder gleichzeitig in eine .exe zu packen?
PureBasic v4.00 (Windows - x86)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

1. InitSound ist ein Command, also pack es an den Anfang und nur einmal.

2. wenn deine buttons was auslösen sollen, musst du auch deren events abfragen.

3. du solltest nicht versuchen, beide songs in denselben sound zu laden...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

Kann ich denn mit einem Command 2 Sound Dateien laden? Denn irgendwoher muss ja die 2. Sound Datei kommen.

Zu den Events:

Code: Alles auswählen

Repeat
  EventID = WaitWindowEvent()
  If EventID = #PB_Event_CloseWindow 
    Quit = 1
  EndIf
  If EventID = #PB_Event_Gadget
    If EventGadgetID()= 0
      MessageRequester("Achtung!","Zweiter Knopf!!",0)
    EndIf
    If EventGadgetID()= 0
      MessageRequester("Achtung!","Erster Knopf!",0)
    EndIf
  EndIf
Until Quit=1
EndIf
End
Geht das so? Und kann ich anstelle des MessageRequesters dann die Play-Funktion nehmen?

eingerückt - Kaeru fecit
PureBasic v4.00 (Windows - x86)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du solltest dir erstmal klar drüber werden, was welches command macht und in welcher reihenfolge was funktioniert.

IncludeBinary ist ein Compile-Time command.
das bedeutet, zu dem zeitpunkt wo du compilierst wird das file eingebunden.

CatchSound ist ein Runtime-Command, das bedeutet, es wird zur laufzeit ausgeführt
und muss auch an einer stelle im code stehen, wo die CPU hinkommt zur Laufzeit...

so die DataSection:

Code: Alles auswählen

DataSection
Music1: 
  IncludeBinary "c:\date.wav"

Music2: 
  IncludeBinary "c:\rammstein.wav"
EndDataSection
so das einladen am anfang:

Code: Alles auswählen

InitSound()
CatchSound(0, ?Music1) 
CatchSound(1, ?Music2) 
;...
If OpenWindow(0, 400, 400, 400, 200, "Was möchten Sie hören?", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) 
...und natürlich brauchst du auch code, der überhaupt auf das drücken der buttons reagiert...
die HELP hilft...

PS:
ich war schon am schreiben... ja, deine button abfrage sieht auf den ersten blick ok aus...

PPS:
aber BITTE code einrücken, das kann doch keiner lesen so...

PPPS:
so.. habs mal eingerückt...
also, du solltest schon die richtigen GadgetIDs nehmen, also 1 und 2, nicht beide male 0...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
by night
Beiträge: 45
Registriert: 24.02.2007 21:52

Beitrag von by night »

Hm ... Er sagt mir "EventGadgetID() is not a function, array, makro or linked list"
PureBasic v4.00 (Windows - x86)
Antworten