Wie baut man einen Programmablauf in Pure Basic richtig auf?

Anfängerfragen zum Programmieren mit PureBasic.
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Diesen Schnipsel brauchst du dir gar nicht erst aufschreiben, merken
oder wie auch immer.
Oh, Sensei, eure Weisheit übertrifft die Meinige um Längen.

Bist du voll? Meine Version funktioniert gut, ist einfach und kann auch unter Linux angewandt werden.

Und jetzt kommst du...
Optimismus ist ein Mangel an Information.
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Hilfe zu WindowEvent() hat geschrieben:Possible Events are :
#PB_Event_Menu : a menu has been selected
#PB_Event_Gadget : a gadget has been pushed
#PB_Event_CloseWindow : the window close gadget has been pushed
#PB_Event_Repaint : the window content has been destroyed and must be repained (useful for 2D graphics operations)
#PB_Event_SizeWindow : the window has been resized
#PB_Event_MoveWindow : the window has been moved
#PB_Event_ActivateWindow : the window has been activated (got the focus)
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Myrddin hat geschrieben:Danke Leute, glaube jetzt ist der Groschen so langsamm gefallen.

Nochmal allgemein, für andere Anfänger und das ichs auch recht verstanden habe:
1. Also jede Aktion die entweder ich ausführe (Knopf drücken, Taste drücken, etc) oder das Programm (Text in ein Gadget schreiben, etc) lösst ein Event aus.
2. Die Events müssen vom Programm abgearbeitet werden. Ohne das passiert nichts. Also wenn ich ein Text in ein Gaget schreibe erzeugt das ein Event das ein Anzeigen/Auffrischen auslöst.
3. Ich kann die Events abfragen und ggF weitere Aktionen auslösen.

Ich kann jetzt also über weitere Case-Abfragen z.B. Tastatureingaben verarbeiten, oder?

Ja die F1-Hilfte ist gut aber bei weitem nicht perfekt. Mein Problem, ich habe da noch keine Liste der Events-Konstanten gefunden. Nur einzelne Konstanten tauchen hier und da mal auf. Gibt es da eine Liste?

Gruß
Michael
1. ja, jede aktion loest ein event aus.
2. nein, du behandelst nur die die du auch haben moechtest bzw brauchst.
3. jop
4.? jop

Das Eventsystem von PB bietet nicht viel , zumindest nicht fuer Anfaenger.
Hier solltest du schon Callbacks nutzen (setwindowcallback([...])). Eine
vollstaendige Liste aller Events wird es wohl nicht geben, aber auf
MSDN findest du unter 'WM_' reichlich.
http://msdn.microsoft.com/library/defau ... indows.asp

@hell
Der Code fuehrt frueher oder spaeter nur zu Problemen, wurde schon oft drueber diskutiert , musst mal suchen. Den Rest ueberles ich jetzt mal ...

@kg
hab kein PB 4.0 fuer Linux.... und wurde auch nicht verlangt, zumindest nicht von Myrddin.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Das Eventsystem von PB bietet nicht viel , zumindest nicht fuer Anfaenger.
> Hier solltest du schon Callbacks nutzen

absurd

besonders anfänger sollten erstmal mit den events von haus aus klarkommen.

erst wenn es komplexer wird (wie hier evtl. schon gegeben)
kann man auf callbacks umsteigen.

aber callbacks sind ne geschichte für sich, und nichts selbstverständliches für PB.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

> Das Eventsystem von PB bietet nicht viel
Das Eventsystem bietet für die meisten Anwendungsfälle genug.

> hab kein PB 4.0 fuer Linux.... und wurde auch nicht verlangt, zumindest nicht von Myrddin.
Es wurde auch nicht nach einer Windows-only-Lösung verlangt.
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

@edel:
Die Probs bekommst du bei Fehlern zwischen den Kopfhörern, ansonsten funktioniert das ohne weiteres. Wenn Eventverarbeitung und Programm nicht abgestimmt sind, gibts bei jeder Logik Probs.

Zu Linux:
Niemand hat gesagt, dass es nur unter Win laufen soll.

Was ich dazu meine:
Du schießt mit Kanonen auf Spatzen, das muss nicht sein.

@myrrdhin: Mach dir selber ein Bild. Ich hab die Weisheit nicht mit Löffeln gefressen.
Optimismus ist ein Mangel an Information.
Myrddin
Beiträge: 7
Registriert: 10.09.2006 15:44
Wohnort: Immenstadt im Allgäu

Beitrag von Myrddin »

Wieder ein Hallo in die Runde. Erstmal, bitte streitet doch bitte nicht. Glaubenskriege haben noch nie was gebracht.

Und das zu klären, mir reicht eine reine Windows-Lösung. Nur verstehen sollte ich sie können. Euch für mich Lösungen finden zu lassen kann ja keine Dauerlösung sein.

Nun ich DACHTE ich hätte es jetzt irgendwie kapiert. Nur, jetzt hakt es schon wieder. Also bitte ich nochmal um Eure Hilfe. Das artet leider langsamm in einem Programmierkurs aus. Ich empfinde im Moment Pure Basic als unfassbar umständlich und kompliziert. Es ist frustrierend wie kompliziert es ist Erfolgserlebnisse zu haben. Das war ja zu GW-Basic Zeiten noch einfacher. :shock:

In VB hätte ich nun einfach das Fenster gezeichnet, nen Timer gesetzt und den Timer den Code starten lassen. Ist das so etwa die Lösung von Edel, oder?

So mein neues Problem. Ich will nun den Faktor für die Berechnung per Tastendruck ändern können.

Code: Alles auswählen


    While EventID 
        ;Events abarbeiten, mit Callback wärs vielliecht schöner 
        Select EventID
         
            Case #PB_Event_CloseWindow ; Fenster schliessen
                End 

            Case #WM_KEYUP 
              
              EventwParam= EventwParam() & $FFFF
              Debug EventwParam 
          
              Select EventwParam 

              Case 37     ; Cursor links
                Berechnung1 = Berechnung1 - 1
            
              Case 39     ; Cursor rechts
                Berechnung1 = Berechnung1 + 1               
               
              EndSelect              
               
        EndSelect 
        EventID =WindowEvent() 
    Wend



Diese Tastenabfrage habe ich aus einem Codeschnipsel hier im Forum. Wenn ich das richtige verstehe wird bei Tastendruck das Event #WM_KEYUP ausgelöst. Das EventwParam() gibt als Parameter die Taste zurück. Über eine weitere SELECT/CASE Abfrage kannt die Tasten mit Anweisungen belegen.

Problem: Das Programm verschlucht nun wieder Events, ich muß die Taste mehrfach drücken bis eine Reaktion kommt.

Gruß
Michael
Pure Basic 4.0
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Warum WindowEvent() die Events verschluckt, ist mir nun wirklich ein Rätsel. Da kennt sich Edel besser aus.

Code: Alles auswählen

    EventID =WaitWindowEvent(10)
    
    While EventID
        ;Events abarbeiten, mit Callback wärs vielliecht schöner
        Select EventID
            
            Case #PB_Event_CloseWindow ; Fenster schliessen
                End
                
            Case #WM_KEYUP
                
                EventwParam= EventwParam() & $FFFF
                Debug EventwParam
                
                Select EventwParam
                    
                    Case 37     ; Cursor links
                        Berechnung1 = Berechnung1 - 1
                        Debug "Links"
                        
                    Case 39     ; Cursor rechts
                        Berechnung1 = Berechnung1 + 1               
                        Debug "Rechts"
                        
                EndSelect             
                
        EndSelect
        EventID =WaitWindowEvent(1)
    Wend
So klappts aber.
Optimismus ist ein Mangel an Information.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Es werden von Compiler nicht alles Events bei WindowEvent() oder WaitWindowEvent() weitergereicht. Zum Beispiel wie #WM_ENTERIDLE welches ich abfragen wollte um die Menus zu aktuallisieren.
Also mit SetWindowCallback gearbeitet.

http://www.purebasic.fr/german/viewtopic.php?t=9833

Wenn nichts zyklisch bearbeitet werden soll dann lieber WaitWindowEvent() nehmen. Reduktziert die CPU auslastung ungemein.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Myrddin
Beiträge: 7
Registriert: 10.09.2006 15:44
Wohnort: Immenstadt im Allgäu

Beitrag von Myrddin »

@Hell: Nun also mit Deiner neuen Lösung erkennt er die Tasten häufiger aber immernoch nicht sicher.

@mk-soft: Was Callback betrifft verstehe ich schon wieder bloß Bahnhof. Da half auch keine F1-Hilfe.

Ich versuchs jetzt mal mit Buttons, vieleicht klappt ja das.

Danke allen für die Hilfe. Melde mich ggF die nächste Zeit nochmal sollte ich irgendwie weiter gekommen sein.

Gruß
Michael
Pure Basic 4.0
Antworten