Seite 2 von 2

Verfasst: 08.02.2005 13:01
von DarkDragon
@sobi: Prozeduren(Procedure ...() : EndProcedure) kann man mit Funktionen(function ...() { } ) vergleichen. In PHP kann man die Includedateien vom Script aus kontrollieren, in PB kannst du mit dem Code nichts an den Includedateien ändern.

Verfasst: 08.02.2005 13:08
von sobi
freedimension hat geschrieben:Zum übersichtlichem Gestalten von Code eignen sich neben Includes auch hervorragend Prozeduren (siehe Procedure). Dein Fall wäre eine gute Anwendung davon.
Hi freedimension,

Hab das mir angeschaut, durchgelesen, probiert... wie und wo Bau ich eine Prozedur ein?


Liebe Grüße,


Simon

Verfasst: 08.02.2005 13:15
von DarkDragon
DarkDragon hat geschrieben:@sobi: Prozeduren(Procedure ...() : EndProcedure) kann man mit Funktionen(function ...() { } ) vergleichen. In PHP kann man die Includedateien vom Script aus kontrollieren, in PB kannst du mit dem Code nichts an den Includedateien ändern.
@sobi, schau dir mein Zitat meiner obigen Nachricht an.
Da du PHP kannst kennst du sicher auch
function ...() { }

Die Prozedur muss zumindest vor den Aufrufen der Prozedur deklariert sein.

[EDIT]
Beispiel:

Code: Alles auswählen

Procedure ErrorMsg(Message.s)
  MessageRequester("ERROR", Message.s)
EndProcedure

ErrorMsg("Blubber")

Verfasst: 08.02.2005 13:18
von Kiffi
sobi hat geschrieben:wie und wo Bau ich eine Prozedur ein?
ungefähr so:

Code: Alles auswählen

IncludeFile("test1.pb") 
IncludeFile("test2.pb") 

  [...]
  If EventMenuID()=1 
    Test1()          
  EndIf    
  If EventMenuID()=2  
    Test2()          
  EndIf 
  [...]
Test1.pb

Code: Alles auswählen

Procedure Test1()
  [...]
EndProcedure
Test2.pb

Code: Alles auswählen

Procedure Test2()
  [...]
EndProcedure
Grüße ... Kiffi

Verfasst: 08.02.2005 13:56
von sobi
Hi Kiffi,

Hab das eingebaut und es funktioniert immerhin schon mal "zur hälfte". Er läd die neue Datei, doch nur wenn ich oben auf "funktion" klicke, dann zeigt er mir die geladene Datei an. Wenn ich dann die andere Datei lade, dann zeigt er mir diese auch an, wenn ich eben oben das Menü öffne. Wie beseitige ich das Problem?

So habe ich das eingebaut:

Code: Alles auswählen

 IncludeFile"test1.pb"
 IncludeFile"test2.pb"
If OpenWindow(0,200,200,250,250,#PB_Window_SystemMenu,"Menü") 
  If CreateMenu(0, WindowID()) 
    MenuTitle("funktionen") 
    MenuItem( 1, "test1.pb") 
    MenuItem( 2, "test2.pb") 
    MenuBar() 
    MenuItem( 3, "Ende") 
  EndIf 
  Repeat 
    EventID = WaitWindowEvent() 
    If EventID = #PB_Event_CloseWindow 
      Quit = 1 
    EndIf 
    If EventMenuID()=1 
     Test1()          
    EndIf    
    If EventMenuID()=2  
     Test2()          
    EndIf 
    If EventMenuID()=3 
     Quit=1 
    EndIf  
  Until Quit=1 
EndIf 
End 

Code: Alles auswählen

Procedure Test1() 
CreateGadgetList(UseWindow(0)) 
TextGadget(1, 10,80,200,20,"DATEI 1") 
EndProcedure 

Code: Alles auswählen

Procedure Test2() 
CreateGadgetList(UseWindow(0)) 
TextGadget(1, 10,150,200,20,"DATEI 2") 
EndProcedure 
Vielen Dank für eure Mühe und Geduld!
Grüße,


Simon

Verfasst: 08.02.2005 14:26
von Kiffi
so langsam verliere ich den Überblick... :freak:
sobi hat geschrieben:Hab das eingebaut und es funktioniert immerhin schon mal
"zur hälfte". Er läd die neue Datei, doch nur wenn ich oben auf "funktion"
klicke, dann zeigt er mir die geladene Datei an.
ja klar, ich bin davon ausgegangen, dass Du dieses Verhalten genauso
haben wolltest. Vielleicht erklärst Du uns noch einmal, was das Programm
überhaupt tun soll.

Nebenbei: Nimm lieber nachfolgenden Code. Der flimmert nicht so ;)

Code: Alles auswählen

IncludeFile"test1.pb"
IncludeFile"test2.pb"
If OpenWindow(0,200,200,250,250,#PB_Window_SystemMenu,"Menü")
  If CreateMenu(0, WindowID())
    MenuTitle("funktionen")
    MenuItem( 1, "test1.pb")
    MenuItem( 2, "test2.pb")
    MenuBar()
    MenuItem( 3, "Ende")
  EndIf
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        Quit = 1
      Case #PB_Event_Menu
        Select EventMenuID()
          Case 1
            Test1()         
          Case 2 
            Test2()         
          Case 3
            Quit=1
        EndSelect
    EndSelect
    
  Until Quit=1
  
EndIf

End

Top, der Hase läuft!

Verfasst: 08.02.2005 16:09
von sobi
Kiffi hat geschrieben:ja klar, ich bin davon ausgegangen, dass Du dieses Verhalten genauso
haben wolltest. Vielleicht erklärst Du uns noch einmal, was das Programm
überhaupt tun soll.
Hi Kiffi,
:allright: :allright: :allright:
Habe das mit deinem Code ausprobiert und mit dem funktioniert das so, wie ich es mir wünsche! :-)
Coole Sache, dankeschön! :allright: So weit ich das beobachtet habe, hast du das mit "Case" zusammengebaut! Jetzt blick ich zwar nicht ganz so durch, aber manchmal kommt das funtkionieren vor dem Durchblick! :-)

Liebe Grüße und vielen Dank für jeden Ratschlag,


Simon

Verfasst: 08.02.2005 21:23
von bluejoke
Select - Case ist das selbe wie in PHP Switch - Case.

Verfasst: 10.02.2005 15:53
von Kaeru Gaman
wenn ich das hier halbwegs richtig verstehe, geht es um eine code-veränderung zur laufzeit.

das ist bei compiler-sprachen grundsätzlich nicht so möglich wie bei script-sprachen.

die hier vorgeschlagenen lösungen laufen allesamt darauf hinaus,
das sämtlicher code zur compilezeit zur verfügung steht,
zur laufzeit wird nur eine bedingte ausführung unterstützt.

wenn du ein routinen zur laufzeit erstellen willst, müsstest du den PB-compiler integrieren, (vorsicht: copyright)
dann könntest du DLLs erstellen lassen.

eine andere möglichkeit wäre eine eigene scriptsprache, die vorerstellte routinen anspricht.