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
Test2.pb
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...
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,
Habe das mit deinem Code ausprobiert und mit dem funktioniert das so, wie ich es mir wünsche!

Coole Sache, dankeschön!

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.