Ist hier eine Schlaufe möglich?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

Danke für den Tip.

Das mit dem SetGadgetState habe ich in der Hilfe gelesen auch ein wenig rumprobiert, aber irgendwie hat es bei mir nicht getut , so habe ich einen Weg gesucht der funktioniert, auch wenn er sehr kommisch ist.

So nun werde ich mich mal ans Werk machen und sehen wie es weiter geht.

Danke für alles, Duli
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das mit SetGadgetState habe ich übersehen :oops: , liegt aber daran,
das der Code nicht vollständig ist, somit nicht testbar, in solchen Fällen
kann das schon passieren :wink:
Um mit Arrays zu arbeiten, soweit ist Dully im moment noch nicht, denke
ich einfach mal. Schleifen sind aber auch mit Konstaten möglich, sogar
problemlos

Code: Alles auswählen

Enumeration ;myPictures
  #bild1
  #bild2
  #bild3
  #bild4
EndEnumeration
#bild_ende = #PB_Compiler_EnumerationValue - 1

For I = #bild1 To #bild_ende
; bla
Next
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm...

also, mir erscheint der ansatz mit den konstanten weit fehleranfälliger.
wenn schon, dann würde ich die schleife

Code: Alles auswählen

For I = #bild1 To #bild4
; bla
Next
allerdings wird damit zwingend vorausgesetzt, dass die konstanten in der enum wirklich hintereinanderstehen,
damit geht ein teilsinn der konstantenverwendung verloren.

die einführung von #bild_ende ist eine grausige fehlerquelle.
stell dir vor, Duli will jetzt zwei bildreihen verwenden und die natürlich in der selben enumeration aufzählen.
wo soll er dann die beiden _ende hernehmen? auf deine weise kann man nur eine erzeugen.

außerdem ist es redundant. die letzte bildkonstante zu verwenden ist ausreichend.


das Duli noch nicht so weit ist, mit Arrays anzufangen könnte stimmen, soll er halt selber entscheiden.

ich persönlich würde dann allerdings eher empfehlen, direkt mit zahlenwerten zu arbeiten,
anstatt sich anzugewöhnen, schleifen mit konstanten zu bauen.


PS:
wenn du so auf anfängerschonung bedacht bist (was ja gut und richtig ist)
wo warst du, als PureLust ihm nen thread aufs auge gedrückt hat?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

Hallo ts-soft

:o

Wie weit ich genau bin ist mir nicht ganz klar, aber eines weiss ich genau die Schlaufe von dir, für micht total Bahnhof ist???? :oops:

Aber ich werde hier mal den ganzen Code einfügen, damit es testbar wird. (habe nur langsam ein schlechtes Gewissen wenn ich immer so viel Code Poste, das ich hier allen Platz verschende.)

Aber zuerst noch die Bilder die ich verwende
http://www.schmieden.info/duli/Piraten1a.bmp
http://www.schmieden.info/duli/Piraten1b.bmp
http://www.schmieden.info/duli/Piraten1b1.bmp
http://www.schmieden.info/duli/Piraten1b2.bmp
http://www.schmieden.info/duli/Piraten1b3.bmp
http://www.schmieden.info/duli/Piraten1b4.bmp
http://www.schmieden.info/duli/Piraten1b5.bmp

Hier noch der Code

Code: Alles auswählen

; Dies ist das erste Projekt von Tom und Erwin Jaberg.
; Wir haben viel Hilfe im Forum erhalten und bedanken uns recht herzlich für diese Unterstützung.
; Es geht nicht darum hier so schlank und gut wie möglich zu Programmieren, sondern so nachvollziehbar wie möglich. Deswegen
; sind auch Prozeduren für die einzelnen Aufgaben nicht zusammengelegt.









; Mit Eneumeritation wird den Konstanten eine Fortlaufende Nummer vergeben anstelle dies von Hand zu machen.

Enumeration ; hier kommen alle Windows rein
  #Hauptfenster
EndEnumeration
 
Enumeration ; hier kommen alle Menüitems rein
  #Entergedrueckt
EndEnumeration

Enumeration ; hier kommen alle Gadgets rein
  #ErsteZahl
  #ZweiteZahl
  #EingabeErgebnis
  #ErgebnisErrechnet
  #RichtigOderFalschText
  #AnzahlRichtigeText
  #AnzahlRichtigeWert
  #AnzahlFalscherText
  #AnzahlFalscherWert
  #AktuelleDauer
  #BildKonstante
  #BildGadgetKonstante
  #Schriftformatkonstante
  #MalZeichen
  #Konstante_Bildfunktion1
  #Konstante_Bildfunktion2
  #bild1
  #bild2
  #cBild3
  #cBild4
  #cBild5
  #cBild6
  #cBild7
 EndEnumeration





;  Hier werden die Variabeln mit den entsprechenden Werten versehen die es später braucht.
Anzahl_Rechnungen = 0  ; Diese Variabel wird für den Zähler gebraucht der die Rechenaufgaben zählt, damit es immer mit
                       ; eins beginnt in der Schlaufe
Anzahl_Richtig = 0     ; Diese Variable hilft beim Zählen der richtigen, und wird hier auf null gestellt.
Anzahl_Falsche = 0     ; Diese Variable hilft beim Zählen der falschen, und wird hier auf null gestellt.
t_start = ElapsedMilliseconds()  ; Hier wird die Zeit gemessen seit start vom Programm und den Anfangswert eingegeben.



;Hier werden die Bilder in das Programm mit eingebunden wenn es Compiliert wird
  
  DataSection
      Bild1:
      IncludeBinary "Piraten1a.bmp"
      Bild2:
      IncludeBinary "Piraten1b.bmp"
      Bild3:
      IncludeBinary "Piraten1b1.bmp"
      Bild4:
      IncludeBinary "Piraten1b2.bmp"
      Bild5:
      IncludeBinary "Piraten1b3.bmp"
      Bild6:
      IncludeBinary "Piraten1b4.bmp"
      Bild7:
      IncludeBinary "Piraten1b5.bmp"
    EndDataSection
  
  
  
  
  
  
CatchImage(#cBild3, ?Bild3)    ; Bei der Konstante #cBild1 wird der Wert für das den Speicherplatz vom ersten Bild also das 
                               ;?Bild3 gespeichert
CatchImage(#cBild4, ?Bild4)
CatchImage(#cBild5, ?Bild5)
CatchImage(#cBild6, ?Bild6)
CatchImage(#cBild7, ?Bild7)    
    
    
    
    
    

; Diese Prozedur ermöglicht das anzeigen der Zeit die Sekundenweise angezeigt wird.

Procedure Zeit_Updaten(Dummy)   ;Beginn der Prozedur, welche aber als Threat gestartet wird, dass macht es möglich das es 
                                  ;Zeitlich unabhängig vom rest des Programmes läuft.
                                  
   Shared t_start                ;der Variablewert t_start wird in die Prozedur übernommen
   Repeat                        ;Beginn der Schlaufe
      laufzeit_jetzt = ElapsedMilliseconds() - t_start             ;Es wird die Zeit vom Start des Programms bis jetzt errechnet.
      SetGadgetText(#AktuelleDauer, "Laufzeit: " + Str(laufzeit_jetzt/1000) + " s")    ;Es wird dem TextGadget mit der Konstante
                                                                                       ;#AktuelleDauer den Wert zugewiesen welcher
                                                                                       ;zum einen aus dem Resultat der Zeitberechnung
                                                                                       ;zum anderen aus dem nötigen Text besteht
      Delay(1000)                ;Damit die Schlaufe nicht zuviel Prozessorleistung verbraucht, gibt es hier ein Pause von einer Sekunde.
   ForEver                      ;Die Schlaufe läuft bis das Programm beendet wird.
EndProcedure                   ;Ende der Prozedur





; Diese Prozedur erstellt die neue Rechnung, und schreibt sie auf die Oberfläche

Procedure FillGadget()                        ;Beginn der Prozedur          
  SetGadgetText(#ErsteZahl,Str(Random(7)+3))   ;Ein Zufallswert ab der Ziffer 2 bis zum Wert 10 wird dem Textgadget mit der Konstante
                                               ;#ErsteZahl zugewiesen.
  SetGadgetText(#ZweiteZahl,Str(Random(7)+3))  ;Ein Zufallswert ab der Ziffer 2 bis zum Wert 10 wird dem Textgadget mit der Konstante
                                               ;#ZweiteZahl zugewiesen.
  SetGadgetText(#EingabeErgebnis,"")           ;Das Feld wo das Ergebniss reingeschrieben wird, welches das StringGadget mit der
                                               ;Konstante #EingabeErgebnis ist wird geleert.
EndProcedure                   ;Ende der Prozedur

  
  
  

; Diese Prozedur berechnet die Werte in den GadgetTexten mit den Konstanten #ErsteZahl und #ZweiteZahl und wertet aus ob das
; Eingegeben Resultat mit dem errechneten übereinstimmt, und wenn es stimmt wird die Konstante #True mit dem Wert "Wahr" gefühlt.

Procedure rechne()                                       ;Beginn der Prozedur   
 
  val1.s = GetGadgetText(#ErsteZahl)                      ;die Variable val1.s wird mit dem Wert des Textgadget mit der Konstante
                                                          ;#ErsteZahl gefühlt und als Stringvariable deklariert.
  val2.s = GetGadgetText(#ZweiteZahl)                     ;die Variable val2.s wird mit dem Wert des Textgadget mit der Konstante
                                                          ;#ErsteZahl gefühlt und als Stringvariable deklariert.
  result = Val(val1)*Val(val2)                            ;die Variable result wird mit dem gerechneten Wert gefühlt.
  
  SetGadgetText(#ErgebnisErrechnet,Str(result))           ;der Variabelwert result wird dem Textgadget mit der Konstante
                                                          ;#ErgebnisErrechnet zugewiesen.
  
  If result = Val(GetGadgetText(#EingabeErgebnis))        ;"Wenn" das eingegeben Resultat mit dem berechneten Resultat übereinstimmt
                           
   
   ProcedureReturn #True                               ;wird dem Prozedurresultat mit der Konstante #True "Wahr" zugewiesen.
    
    If CatchImage(#bild2, ?Bild2) ;Hier wird das Bild das in das Programm eingebunden, wobei das ?Bild2 der Wert ist wo das Bild gespeichert wird.
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2));Hier wird das Bild mit dem ImageGadget dargestellt.
     EndIf 
   
   
  Else 
   
      
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild4))
    Delay(200)
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild5))
    Delay(200)
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild4)) 
    Delay(200)
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild6))
    Delay(200)
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild7))       
    Delay(200)
    ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild6))        

   
   
   
  EndIf                                                  ;Wenn beendet
 
EndProcedure                                            ;Ende der Prozedur




; Diese Prozedur gibt eine Meldung aus in einem Meldefenster in welchem die Anzahl richtigen und falschen Antworten und die benötigte
; Zeit für die Aufgabe ausgegeben wird.

Procedure Auswertung()                            ;Beginn der Prozedur    
  Shared Anzahl_Richtig                           ;Der Variabelwert Anzahl_Richtige wird in die Prozedur übernommen    
  Shared Anzahl_Falsche                           ;Der Variabelwert Anzahl_Falsche wird in die Prozedur übernommen    
  Sekunden.s = GetGadgetText(#AktuelleDauer)       ;Der Variabelwert der Dauer wird in die Prozedur übernommen
  
                                                   ;Die folgende Meldungsausgabe stellt die Variabelwerte in einem Sinnergebenden
                                                   ;Text dar.
  MessageRequester("Information", "Du Wicht hast nur " + Str(Anzahl_Richtig) + " Richtige von 10 Herausvorderungen gemacht und dafür "+ Sekunden + " gebraucht" , #PB_MessageRequester_Ok)
                                                    
  End
 EndProcedure                                     ;Ende der Prozedur






; Beginn des Hauptteil des Programms welches nur einmal durchlaufen wird.


;Das Fenster wird in der entsprechenden grösse und Titelbeschriftung geöffent.
If OpenWindow(#Hauptfenster,0,0,250,400,"Taschenrechner",#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
 
  ;Hier werden die verschiedenen Gadgets eingefügt und Positioniert
  If CreateGadgetList(WindowID(#Hauptfenster))

    If CatchImage(#bild1, ?Bild1) ;Hier wird das Bild das in das Programm eingebunden, wobei das ?Bild1 der Wert ist wo das Bild gespeichert wird.
     ImageGadget(#Konstante_Bildfunktion1, 100, 0, 100, 70, ImageID(#bild1))   ;Hier wird das Bild mit dem ImageGadget dargestellt.
    EndIf    
    
    TextGadget(#ErsteZahl,20,30,20,30,Str(Random(7)+3))     ;Die erste Zahl der Rechnung wird Positioniert, 
                                                            ;20 Pixel von links, 30 Pixel von oben, 20 Pixel breit, 30 Pixel hoch
                                                            ;Da sich das bei den anderen Zeilen wiederhollt beschreibe ich die sich 
                                                            ;wiederhollenden Zeilen hier nicht noch einmal.
    TextGadget(#MalZeichen, 41, 30, 20, 30, "*")
   
    TextGadget(#ZweiteZahl,60,30,20,30,Str(Random(7)+3))   
    
    TextGadget(#PB_Any, 0, 70, 150, 20, "Sag was Sache ist Du Pfeife") ;Das erzeugt ein Text der Fest ist auf dem Fenster.
   
    StringGadget(#EingabeErgebnis,0,90,100,38,"",#PB_String_Numeric)   ;Das erzeugt ein Feld auf dem Fenster
    
    TextGadget(#PB_Any, 0, 140, 200, 20, "Rechne und hau die Finger aufs Enter")
    
    TextGadget(#RichtigOderFalschText, 0, 160, 150, 40, "")
    
    TextGadget(#ErgebnisErrechnet,160,160,100,30,"")
    
    TextGadget(#AnzahlRichtigeText, 0, 200, 100, 20, "Richtige")
            
    TextGadget(#AnzahlRichtigeWert, 100, 200, 30, 20, "")
    
    TextGadget(#AnzahlFalscherText, 0, 220, 100, 20, "Falsche")
            
    TextGadget(#AnzahlFalscherWert, 100, 220, 30, 20, "")
    
    TextGadget(#AktuelleDauer, 0, 270, 100, 20, "Laufzeit: " + Str(laufzeit_jetzt/1000) + "s")
    
     If CatchImage(#bild2, ?Bild2)
       ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#bild2))
     EndIf 
     
     
     
    ; Hier werden die Konstanten welche aufgeführt sind mit der Schriftart VErdana 22 versehen, 
    If LoadFont(#Schriftformatkonstante, "Verdana", 22, 0)   ;Der Formatierungswert wird die Formatierungskonstante 
                                                             ;#Schriftformatkonstante erfasst
      SetGadgetFont(#ErsteZahl,        FontID(#Schriftformatkonstante))   ;mit da FontID meherer Werte haben kann wird dies mit der 
                                                                          ;Konstante #Schriftformatkonstante definiert das es um den
                                                                          ;Wert Verdana 22 geht.
      SetGadgetFont(#ZweiteZahl,       FontID(#Schriftformatkonstante))
      SetGadgetFont(#MalZeichen,       FontID(#Schriftformatkonstante))
      SetGadgetFont(#EingabeErgebnis,  FontID(#Schriftformatkonstante))
    EndIf
    
    AddKeyboardShortcut(#Hauptfenster,#PB_Shortcut_Return,#Entergedrueckt) ; Hier wird der Konstante #Entergedrueckt ein Wert zugewiesen
                                                                           ; der unten ausgewertet werden kann, dieser Wert wurde oben
                                                                           ; festgelegt mit der Ziffer1 in der Zeile 21
    
    SetActiveGadget(#EingabeErgebnis)   ; Mit dem Cursor das Feld der Eingabe anspringen.
    
    CreateThread(@Zeit_Updaten(),0)     ; Die Prozedur als Thread aufrufen (unterprogramm das Zeitlich unabhänig ist.)
    
  EndIf
EndIf

;Damit das Programm nicht gleich abstellt sondern weiterläuft wird mit einer Schlaufe gearbeited welche die möglichen zustände
;und ergebnisse die entstehen abfängt und auswerted.

Repeat
  EventID = WaitWindowEvent()     ; Es muss was geschehen auf dem Fenster

  Select EventID                 ; Auswertung der Geschehnisse die in der Variable EventID sind.

    Case #PB_Event_Menu          ; Wenn es eine Wert ist der mit der Funktionen der Menüsteurung im Programm zu tun hat hier weiter fahren.
      If EventMenu() = #Entergedrueckt  ; Wenn es die Entertaste war die gedrückt wurde.
           
                 
          If rechne()                  ; Prozedur rechne() aufrufen und das Resultat hier gleich auswerten und wenn es in der
                                       ; in der Prozedur bei der Auswertung richtig ist, sprich die Eingabe war richtig
                                       ; war und wird hier ausgeführt.
            Anzahl_Richtig = Anzahl_Richtig +1    ;Zähler richtige Antwort eins höher stellen             
            SetGadgetText(#RichtigOderFalschText, "Richtig das Resultat war")
            SetGadgetText(#AnzahlRichtigeWert, Str(Anzahl_Richtig))
           
          Else
                                       ; Wenn in der Prozedur rechne() ausgeführt wurden, und das Eingegeben Ergebenis nicht
                                       ; Stimmte wird das hier ausgeführt.
            Anzahl_Falsch = Anzahl_Falsch +1    ;Zähler falsche Antwort eins höher stellen
            SetGadgetText(#RichtigOderFalschText, "Aber aber so was auch, das richtige Resultat lautet")
            SetGadgetText(#AnzahlFalscherWert,Str(Anzahl_Falsch))
          EndIf
         
        FillGadget()    ;die Prozedur FillGadget aufrufen
        SetActiveGadget(#EingabeErgebnis) ;gehe mit dem Curser in das Eingabefeld
       
        Anzahl_Rechnungen=Anzahl_Rechnungen+1        ;Zähler anzahl gerechneter Rechnungen eins höher stellen
         If Anzahl_Rechnungen = 10                   ;Wenn zehn Rechnungen gemacht wurden die Prozedur Auswertung starten
         Auswertung()
         
         EndIf ; Endif von der Auswerten ob es schon 10 Rechnungen waren.
         
   EndIf ; Endif ob es einen Menüevent gab.
   
    Case #PB_Event_CloseWindow     ;Wenn auf die Beendenschalftläche im Menübalcken des Fenster geklickt wurde.
      
      End   ;Programm beenden
     
    Case #PB_Event_Gadget          ;Wenn ein Event_Gadget ausgeführt wurde, was hier noch nicht eingebaut ist, z.B. eins Schaltfläche
                                    ;so kann sie hier ausgewertet werden.

  EndSelect         ; Ende der Auswertung der Variable von EventID
  
 ForEver      ; Das Ende der Schlaufe die das Programm am laufen erhält.
  
 ;Until EventID = #PB_Event_CloseWindow        ;Wäre eine andere Art des Endes der Schlaufe die das Programm am laufen erhält. Wäre ein möglichkeit das Programm 
 ;zu beenden wenn es oben in dem Case #PB_Event_CloseWindow nicht schon angewenet wurde. Dies könnte durch eine andere Auswertungsstruckur
 ;her kommen.
End
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

Hallo Kaeru Gaman

Danke für weitere Erklärung, ich glaube auch dass ich den Sichtwinkel von Dir Teile. Denn, da ich eher ein Chaot bin, weiss ich später bestimmt nicht mehr dass es bei der Nummerierung der Konstanten wichtig ist mit 0 zu beginnen und die richtigen Reihenfolge zu haben. Jedoch finde ich es super was ich wieder alles dazu gelernt habe, von euch beiden. Danke für euere Geduld und auch die verständliche Art es zu erklären, dass ich die Schlaufe nicht verstanden habe hänt mit mir zusammen. So im letzten Threat habe ich mal das umgesetzt was ihr geschrieben habt bevor es mit der Schlaufe lossging, aber bereits diese Veränderungen waren wichtig für mich, danke.

So nun werde ich mal ein wenig rumpröbeln und sehen was dabei herauskommt.

Danke noch vielmals :allright:
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ist mir zuviel, bzw. bringt es nichts wenn ich es umstrukturiere und Du
verstehst es nicht.

Code: Alles auswählen

Enumeration ; hier kommen alle Gadgets rein
  #ErsteZahl
  #ZweiteZahl
  #EingabeErgebnis
  #ErgebnisErrechnet
  #RichtigOderFalschText
  #AnzahlRichtigeText
  #AnzahlRichtigeWert
  #AnzahlFalscherText
  #AnzahlFalscherWert
  #AktuelleDauer
  #BildKonstante
  #BildGadgetKonstante
  #Schriftformatkonstante
  #MalZeichen
  #Konstante_Bildfunktion1
  #Konstante_Bildfunktion2
  #bild1
  #bild2
  #cBild3
  #cBild4
  #cBild5
  #cBild6
  #cBild7
EndEnumeration 
Ganz oben steht: ; hier kommen alle Gadgets rein
Ein ImageGadget ist ein Gadget, aber ein Image ist kein Gadget, sondern ein
Bild, welches man z.B. in einem ImageGadget darstellen kann.
Gehört also in eine separate Enumeration, oder wie Kaeru Vorschlug in ein
Array.

Guck Dir immer wieder die Hilfe an, Beispiel die Du findest und entwickel
Deine eigene Logik. Den Code für Dich schreiben bringts nicht. Optimiere
ihn selber, wenn nicht heute, dann später, kommt von alleine :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

:mrgreen:
Klaro auf jeden Fall, aber wenn ich die Schlaufe ansehen verstehe ich nur Bahnhof

Code: Alles auswählen

For I = #bild1 To #bild_ende
; bla
Next
Und hier sei gesagt das ich sehr wohl die Hilfe lese und auch im Forum nach anderen Lösungen suche.

Aber was verstehe ich den nun und was nicht.

"For" startet die Schlaufe bis der grösste Wert von den Enumerirten Konstanten #bild1.. erhalte aus der Zeise wo der Wert der

Code: Alles auswählen

#bild_ende = #PB_Compiler_EnumerationValue - 1
erzeugt wurde.
; bla Hier weiss ich nicht was rein kommt? kommt hier das aufrufen des Bildes oder was hin???
Und ja selbstverständlich habe ich es ausprobiert und auch versucht es selber zu schreiben, aber echt, der Hacken liegt oft im Detail.
"Next" geht wirder zum Schlaufenangang zurück.

Ich weiss auch nicht ob es hier eine Abkürzung die noch was anderes Bedeuted enthalten ist.

Danke dennoch für eure Mühe mit mir.

Was mir auch noch nicht so klar ist wie das mit den Enumerationen genau geht, wie es funktioniert habe ich verstanden, aber welche Konstanten da wo zusammen gelegt werde ist mir noch nicht so klar, aber da dürft ihr mir noch nicht antworten, den das werde ich zuerst nachlesen bevor ich euch damit löchere.

grüssli Duli :lol:
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

duli hat geschrieben::mrgreen:
Klaro auf jeden Fall, aber wenn ich die Schlaufe ansehen verstehe ich nur Bahnhof

Code: Alles auswählen

For I = #bild1 To #bild_ende
; bla
Next
Das war jetzt so gemeint:

Code: Alles auswählen

Else


  ;     ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild4))
  ;     Delay(200)
  ;     ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild5))
  ;     Delay(200)
  ;     ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild4))
  ;     Delay(200)
  ;     ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild6))
  ;     Delay(200)
  ;     ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild7))
  ;     Delay(200)
  ;     ImageGadget(#Konstante_Bildfunktion2, 110, 220, 100, 70, ImageID(#cBild6))

  For I = #bild2 To #bild_ende
    SetGadgetState(#Konstante_Bildfunktion2, ImageID(I))
    Delay(200)
  Next


EndIf
Um diesen Codeteil in einer Schlaufe auszuführen. Aber vorher solltest
Du Deine Enumerationen nochmal überdenken.
Eine für Fenster, eine für Gadget, eine für Images, eine für Menüs, usw.
je nachdem was Du so alles brauchst.
Aus den Namen sollte auch hervorgehen, was es ist! #Gadget_Image oder so
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

da es anscheinend überlesen wurde, sage ich es noch mal:
die konstante #bild_ende zu erzeugen und zu benutzen ist überflüssig und unsinnig!

1. ist das konstrukt

Code: Alles auswählen

#bild_ende = #PB_Compiler_EnumerationValue - 1
absolut unzuverlässig. dadurch kommt noch eine zusätzliche voraussetzung hinzu,
nämlich, dass wirklich als letztes die bilderkette numeriert wurde.

und was passiert, wenn ich sowas habe?

Code: Alles auswählen

Enumeration ;myPictures
  #bild1
  #bild2
  #bild3
  #bild4
  #NochEinBildchen
  #UndEinIcon
EndEnumeration
#bild_ende = #PB_Compiler_EnumerationValue - 1 
dann gehts in die hose.

wenn schon eine schleife, dann ganz einfach

Code: Alles auswählen

  For I = #bild1 To #bild4
    SetGadgetState(#Konstante_Bildfunktion2, ImageID(I))
    Delay(200)
  Next
oder nicht?
es besteht keine ursache, eine weitere konstante zu erzeugen,
die den selben wert wie #bild4 haben soll,
aber unter umständen einen anderen bekommt.

...das ging jetzt hauptsächlich an ts, ich hoffe, ich verwirre dich nicht zu sehr, duli...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ist nicht überfllüssig und schon garnicht unsinnig. Sicher kann man das
falsch anwenden. Das ist aber immer so. Neu Bilder kann ich vorne
reinschieben, wenn die nicht dazugehören, welche die da zu gehören
hintendran.

Wichtig ist nur, das ich die Kontanten-Namen verwende, nicht deren Wert. Bei
der Reihenfolge muß ich lediglich ein klein bißchen aufpassen, wie immer
beim programmieren. Ich würde sogar im Array Konstanten-Namen
verwenden, weils einfach besser zu merken ist als Zahlen.

Solange etwas nicht Dynamisch erstellt wird, sind Konstanten immer besser.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten