Zweites Fenster

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Zweites Fenster

Beitrag von Tsuki-Namida »

Hallo ich bin es mal wieder :roll:

Ich habe ein kleine unter programm gemacht und möchte dieses in einem Hauptprogramm aufrufen.
Ich habe diesen befehl genutzt: IncludeFile "Player.pb"

Ich bekomme aber bei der Benutzeroberfläche des Players einen Fehler: AProcedure can't de declared inside an If, Repeat, While or For.

Und die Zeile sieht so aus:
Procedure Open_Window_0()

Was habe ich falsch gemacht????
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Eigentlich wie die Fehlermeldung sagt... :wink:

Include-Dateien solltest Du ziemlich am Anfang Deinens Hauptcodes "includen", da darin die Prozeduren deklariert werden.

Du machst dies vermutlich erst innerhalb der Hauptschleife.
Dort gehört jedoch nur der Aufruf der vorher (in der Include-Datei) deklarierten Prozedur hin.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

Sorry aber ich habe das leider nicht verstasnden :(
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

Hallo Magix-Soft <Kain>

am besten postest du deinen Source hier im Thread
(aber schön in Code-Tags :D ) damit wir klarer sehen.
Nur so aufs gerade wohl wird das sonst nix mit ner fundierten
Fehlersuche.

Gruß FGK
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Nun, eine Prozedur darf nicht innerhalb einer Schleife (For, While, Repeat) oder einer bedingten Verzweigung (If) stehen.
Wenn du also eine Include-Datei hast, welche eine Prozedur beherbergt, so darf diese auch nur ausserhalb der oben genannten Konstrukten eingefügt werden.
Zuletzt geändert von freedimension am 20.11.2005 20:19, insgesamt 1-mal geändert.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Lupo
Beiträge: 147
Registriert: 16.02.2005 15:15

Beitrag von Lupo »

Ich vermute mal du möchtest das zweite Programm, mit dem ersten
Programm aufrufen und hast den Befehl IncludeFile "Player.pb"
einfach an die Stelle (nach einem Buttonevent) geschrieben wo du
den Player aufrufen willst.

Du schreibst den Befehl IncludeFile "Player.pb" am besten gaaanz
oben in die allererste Zeile deines Hauptprogrammes.
Dann kann nichts schief gehen.

Damit du aber das zweite Programm aus dem ersten aufrufen kannst,
wirst du den Hauptabschnitt des zweiten Programmes ebenfalls als
Procedure definieren müssen, d.h. vor die Haupt Repeat Schleife
(und allfällige Zeilen davor) kommt eine Zeile
Procedure zweitesprogramm()

und nach dem Until am Ende der Hauptschleife kommt Procedurereturn.
Das End bleibt draussen.

Damit das zweite Programm auch alleine Lauffähig bleibt, schreibst du
unter das Procedurereturn vor dem End die Zeile
zweitesprogramm()

Damit wird bei Direktstart des zweiten Programms diese Zeile aufgerufen
und das ist eben die Procedure mit der Hauptloop.

Aus dem ersten Programm rufst du bei dem gewünschten Buttonevent
ebenfalls zweitesprogramm() auf.

So in etwa wird es gehen.

Mögliche Probleme:

Gleiche Konstanten und Bezeichnungen in den beiden Programmen
Globale Variable

Der Debugger meckert ohnehin wenns nicht passt

viel Spass

LUPO
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

Hier habe ich ein paar programm zeilen mit der abfrage des entsprechenden Buttons.

Code: Alles auswählen

; PureBasic Visual Designer v3.92 build 1460

IncludeFile "HauptFenster.pb"
IncludeFile "Player\1\winamp.pbi"
init = init_winamp("Player\1\in_mp3.dll","Player\1\out_wave.dll",hWindow)
Debug init

Open_Button_14()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadgetID() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_EventGadget
    
    If GadgetID = #Player_1
IncludeFile "Player\1\Player.pb"
      
    ElseIf GadgetID = #Plasyer_2
      
    ElseIf GadgetID = #Player_1_Einst
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Und was ist hier 'IncludeFile "Player\1\Player.pb"' drinnen?
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

IncludeFile "Player\1\Player.pb"
soll den Player aufrufen.
Dieser Text ist in 2 Verzeichnissen höher als der Text des Players deshalb aus "Player\1\"
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Es ist egal wo sich die Includedatei befindet , wenn sich in der Datei z.b.
eine Prozedure befindet kannst du sie nicht innerhalb einer IF Anweisung
einbinden.

Schreibe es in etwa so :

Code: Alles auswählen

; PureBasic Visual Designer v3.92 build 1460

IncludeFile "HauptFenster.pb"
IncludeFile "Player\1\winamp.pbi"
IncludeFile "Player\1\Player.pb" ;>- hier ist die playerprocedure() definiert

[...]

  If Event = #PB_EventGadget
   
    If GadgetID = #Player_1
    playerprocedure()
     
    ElseIf GadgetID = #Plasyer_2
     
    ElseIf GadgetID = #Player_1_Einst 
Antworten