Aktuelle Zeit: 09.07.2020 09:47

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Überschreiben von Listenplätzen (?)
BeitragVerfasst: 30.05.2020 10:12 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
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.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Überschreiben von Listenplätzen (?)
BeitragVerfasst: 30.05.2020 13:05 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
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?

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Überschreiben von Listenplätzen (?)
BeitragVerfasst: 30.05.2020 15:28 
Offline

Registriert: 29.10.2011 16:54
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ß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Überschreiben von Listenplätzen (?)
BeitragVerfasst: 30.05.2020 15:33 
Offline

Registriert: 29.10.2011 16:54
Hallo,
anbei habe den Code auch geändert für auf Array's

Ich hoffe das klärt eventuell die Verständnisprobleme

Code:
#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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Überschreiben von Listenplätzen (?)
BeitragVerfasst: 30.05.2020 17:58 
Offline

Registriert: 10.04.2020 12:19
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:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 10 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye