Seite 2 von 2

Re: Überschreiben von Listenplätzen (?)

Verfasst: 30.05.2020 10:12
von STARGÅTE
Ich habe nicht alles genau mitverfolgt, aber ich behaupte mal, dass dir mit einem Array besser geholfen ist, statt mit einer Liste.
Bei Arrays kannst du zu beginn 10 Elemente anlegen, befüllen und bestimmte Elemente anhand ihrer Position eindeutig lokalisieren, lesen und ändern.

Re: Überschreiben von Listenplätzen (?)

Verfasst: 30.05.2020 13:05
von NicTheQuick
Re57 hat geschrieben:Vielleicht wird auch einfach mal PureBasic selber so verbessert, daß man Werte von Listenelementen genauso einfach neu belegen kann wie Werte bei gewöhnlichen Variablen, dann wäre dieser Thread ja gar nicht erst entstanden. Heute werde ich wiedermal kaum Zeit haben für PureBasic, aber ich bleibe irgendwie dran.
Tut mir Leid, aber da gibt es nichts zu verbessern. Listen funktionieren eben genau so und haben einen Grund so zu existieren. Ich habe wie Stargate auch das Gefühl, dass du lieber mit Arrays arbeiten solltest. Denn Listen sind gedacht für eine dynamische Anzahl von Elementen, die man nicht oder selten per Index ansteuert.

Im Übrigens ist der Code in deinem Select-Block immer noch redundant. Du machst in jedem Case genau das gleiche. Oder kommt da zukünftig überall was anderes hin?

Re: Überschreiben von Listenplätzen (?)

Verfasst: 30.05.2020 15:28
von ST4242
Hallo,

ich glaube auch das Du den Sinn von Listen nicht ganz verinnerlicht hast.

Für den Anwendungsfall ist ein Array die bessere Lösung.

Wenn ich deine Select Anweisung richtig verstehe möchtest Du je nach Schritt ein Element hinzufügen.
Allerdings ist es dem Addelement egal, welchen Schritt du ausgewählt hast, sondern es fügt immer an der aktuellen (der zuletzt z.b über Selectelement selktierten position) ein Element ein.

Nutzt du ein Array wird über über den nachfolgenden Wert in der Klammer immer exakt die gleiche Position ausgewählt, unabhänig was vorher oder nachher steht.

Ich hoffe die Erklärungen haben etwas weiter geholfen

Gruß

Re: Überschreiben von Listenplätzen (?)

Verfasst: 30.05.2020 15:33
von ST4242
Hallo,
anbei habe den Code auch geändert für auf Array's

Ich hoffe das klärt eventuell die Verständnisprobleme

Code: Alles auswählen

#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered

If InitMouse() = 0
  MessageRequester("InitMouse fehlgeschlagen", "")
EndIf 

If InitSprite() = 0
  MessageRequester("InitSprite fehlgeschlagen", "")
EndIf

If InitKeyboard() = 0
  MessageRequester("InitKeyboard fehlgeschlagen", "")
EndIf 

If OpenWindow(1,0,0,800,412,"",#Flags) = 0
  MessageRequester("OpenWindow fehlgeschlagen", "")
EndIf

If OpenWindowedScreen(WindowID(1),0,0,800,412) = 0
  MessageRequester("OpenWindowedScreen fehlgeschlagen", "")
EndIf

   StartDrawing(ScreenOutput())
   Box(0,0,800,412,RGB(100,100,220)) ; gr. blaue Farbbox
   StopDrawing(): FlipBuffers()
 
   x = 21  ; Startpunkt linke obere Ecke 
   y = 302 ; Startpunkt linke obere Ecke
   b = 22 
   h = 107 ; 107
 
   For k = 1 To 10 ; wB.
     StartDrawing(ScreenOutput())
     Box(x,y,b,h,RGB(250,250,250))
     StopDrawing()
     x = x + 23
   Next : FlipBuffers()
   
  ;____________________________________________________________________________________________________________________________________________________________________


Dim  Beispiel.i(10)

kl1 = 1
kl2 = 1
kl3 = 1

Repeat   
    ExamineKeyboard()
    Event = WaitWindowEvent()
      Select Event   
        Case #PB_Event_LeftClick
          kl1 = 1
          wmx = WindowMouseX(1)
          wmy = WindowMouseY(1)
         
        Case #PB_Event_CloseWindow
          schliessen = 1
      EndSelect 
     
        If (wmx >= 21 And wmx <= 779) And (wmy > 302 And wmy < 408) And kl1 = 1
          kl1 = 0
       
          zahl = (wmx+2) / 23 ; steht für die Boxen 1 - 10
         
          schritt = schritt + 1
         
;            Select schritt
;              Case 1
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 2         
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 3
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 4
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 5
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 6
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 7
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 8
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 9
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;              Case 10
;                AddElement(Beispiel())
;                Beispiel() = zahl : Debug Beispiel()
;            EndSelect
          beispiel(schritt)=zahl
        EndIf
       
        If KeyboardReleased(#PB_Key_W)
          kl2 = 1
        EndIf
       
        ; Taste W steht für Wiedergabe 
        If KeyboardPushed(#PB_Key_W) And kl2 = 1
          kl2 = 0
         
          For i = 1 To schritt
            ;SelectElement(Beispiel(),i-1)
            box = Beispiel(i) : Debug box
                   
          Next
        EndIf
       
        ; Back-Taste erzeugt Schritt zurück
        If KeyboardReleased(#PB_Key_Back)
          kl3 = 1
        EndIf
       
        If KeyboardPushed(#PB_Key_Back) And kl3 = 1
          kl3 = 0
          schritt = schritt - 1
          If schritt < 1
            schritt = 1
          EndIf
        EndIf
       
Until schliessen = 1 Or KeyboardPushed(#PB_Key_F1)     
End 

Re: Überschreiben von Listenplätzen (?)

Verfasst: 30.05.2020 17:58
von Re57
Mittlerweile läuft mein Programm mit einem Array und die Redundanz ist auch weg. Danke nochmals, das war jetzt echt ein Schritt nach vorn :allright: