include

Für allgemeine Fragen zur Programmierung mit PureBasic.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
sobi
Beiträge: 170
Registriert: 05.02.2005 23:41
Wohnort: passau
Kontaktdaten:

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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")
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
sobi
Beiträge: 170
Registriert: 05.02.2005 23:41
Wohnort: passau
Kontaktdaten:

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
sobi
Beiträge: 170
Registriert: 05.02.2005 23:41
Wohnort: passau
Kontaktdaten:

Top, der Hase läuft!

Beitrag 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
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Select - Case ist das selbe wie in PHP Switch - Case.
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten