Seite 2 von 3
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 20:46
von Bisonte
Re57 hat geschrieben:Vielen Dank für die beiden Codes, aber leider nutzen die mir beide nichts. Prozeduren gehen ja nicht in Repeat-Schleifen und außerdem habe ich mit Prozeduren auch noch nie gearbeitet. Solange es keine einfache Möglichkeit gibt, Arrays oder Listen erstellen und dann auch wieder abfragen zu können, kann ich darauf verzichten. Oder das Handbuch wird da endlich mal gescheit aufbereitet. Da ist wahrscheinlich bei den Erklärungen für List und Array null etwas nachbereitet worden seit PureBasic 4.00 Zeiten oder noch früher, das ist so schlichtweg nicht anbietbar.
Dann solltest du eventuell mal nicht nur die einzelnen Seiten "überfliegen", sondern Stück für Stück abarbeiten. Es sind diverse Beispiele dabei.
Prozedure gehen nicht in Repeat Schleifen.... Lustiger Satz.... Es werden Prozeduren dort aufgerufen, nicht erstellt...
Eventuell solltest du das Anfänger-Kapitel nicht einfach so überspringen....
Die Hilfe ist eigentlich auch für "nicht Programmierer" nachvollziehbar. Aber nur wenn man sie auch liest !
Liste erstellen : NewList
Listenelement hinzufügen : AddElement()
Listen Iteration : ForEach Next
usw....
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 21:05
von Mijikai
Also entweder sind alle Antworten falsch oder ich versteh das Problem nicht

Evtl. hilft eine erneute Schilderung des Problems.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 22:53
von Re57
Danke für die weiteren Hinweise. Ich stelle jetzt mal einen kleinen Code hier ein, wobei einfach nur auf eine schwarze Fläche geklickt wird und dann werden Zufallswerte in die List eingetragen. Zum Schluß werden die dann über ForEach()-Next wieder abgerufen. OK, aber wie kann ich denn nun ganz gezielt z.B.
nur den zweiten Eintrag in der List anzeigen lassen? Genau um diese Möglichkeit geht es mir. Jeden beliebigen Wert in der List möchte ich gerne separat abfragen können. Danke.
Code: Alles auswählen
#Window1 = 1
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered
If InitSprite() = 0
MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf
If InitMouse() = 0
MessageRequester("InitMouse fehlgeschlagen", "Programm endet")
EndIf
If OpenWindow(1,0,0,800,412,"",#Flags) = 0
MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
EndIf
If OpenWindowedScreen(WindowID(1),0,0,800,412) = 0
MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
EndIf
Repeat
ExamineMouse() : ReleaseMouse(#True)
event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
schliessen = 1
EndSelect
NewList List.i()
If event = #WM_LBUTTONDOWN
stp = stp + 1
random = Random(9)
Select stp
Case 1
AddElement(List())
List() = random
Case 2
AddElement(List())
List() = random
Case 3
AddElement(List())
List() = random
EndSelect
EndIf
ForEach List()
Debug (List())
Next
Until schliessen = 1
End
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 19.05.2020 23:16
von Kiffi
kleiner Tipp: Mit NewList() erstellst Du eine neue Liste.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 20.05.2020 00:13
von Mijikai
Re57 hat geschrieben:... aber wie kann ich denn nun ganz gezielt z.B. nur den zweiten Eintrag in der List anzeigen lassen? ...
Mit SelectElement() wenn es eine Liste ist oder über den Array Index wenn es ein Array ist.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 20.05.2020 00:35
von NicTheQuick
Von welchem Handbuch sprichst du eigentlich? Meinst du die Purebasic-Hilfe damit?
Kiffi hat dir einen wichtigen Tipp gegeben. Wenn du in deiner Hauptschleife immer wieder NewList schreibst, dann wird sie jedes mal auch wieder geleert.
Hier ein Beispiel.
Falsch:
Code: Alles auswählen
For i = 1 To 10
NewList b()
AddElement(b())
b() = i
Debug "Zeige Liste"
ForEach b()
Debug b()
Next
Next
Richtig:
Code: Alles auswählen
NewList b()
For i = 1 To 10
AddElement(b())
b() = i
Debug "Zeige Liste"
ForEach b()
Debug b()
Next
Next
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 20.05.2020 10:01
von Re57
Daß NewList() die Liste leert, war in der Tat ein ganz wichtiger Tipp und mittlerweile habe ich jetzt verstanden, wie man die Liste mit SelectElement() abfragt. Danke nachmals an alle! Ich stelle jetzt mal meinen aktualisierten Code hier ein:
Code: Alles auswählen
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered
If InitSprite() = 0
MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf
If InitMouse() = 0
MessageRequester("InitMouse fehlgeschlagen", "Programm endet")
EndIf
If OpenWindow(1,0,0,800,412,"",#Flags) = 0
MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
EndIf
If OpenWindowedScreen(WindowID(1),0,0,800,412) = 0
MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
EndIf
NewList List.i()
Repeat
ExamineMouse() : ReleaseMouse(#True)
event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
schliessen = 1
Case #WM_LBUTTONDOWN
kl = 1
EndSelect
If event = #WM_LBUTTONDOWN And kl = 1
kl = 0
stp = stp + 1
a = a + 10
Select stp
Case 1
AddElement(List())
List() = a
Case 2
AddElement(List())
List() = a
Case 3
AddElement(List())
List() = a
Case 4
AddElement(List())
List() = a
Case 5
AddElement(List())
List() = a
EndSelect
If stp <= 5
SelectElement(List(),stp-1)
Debug (List())
EndIf
EndIf
Until schliessen = 1
End
Ich habe aber jetzt trotzdem noch eine weitere Frage:
Wie kommt es, daß die Werte nach jedem klicken so langsam kommen, wenn die Maus immer auf derselben Position bleibt, während sie ungleich schneller kommen, wenn man die Maus beim Klicken zugleich bewegt? Und wie kann man erreichen, daß das auch bei unbewegter Maus wesentlich schneller geht?
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 20.05.2020 11:24
von NicTheQuick
Das liegt daran, dass deine Hauptschleife nicht korrekt geschrieben ist. Außerdem mischst du Window-Events mit Screen-Events, was eh schon fragwürdig ist. Es gibt auch keinen Grund die Windows-Konstanten #WM_LBUTTONDOWN zu nutzen, wenn es dafür Purebasic-eigene Konstanten wie #PB_Event_LeftClick gibt.
Ich vermute du hast deinen Code aus irgendeinem uralten Tutorial oder Handbuch, was veraltete Konstrukte nutzt. Außerdem machst du zuerst ein InitMouse() und ExamineMouse(), nutzt es aber gar nicht, weil du die Maus direkt wieder mit ReleaseMouse(#True) freigibst, damit du die Klicks auch als Events kriegst.
Also entweder du nutzt ausschließlich ExamineMouse(), MouseX(), MouseButton() und Co aus der Mouse-Library oder du nutzt ausschließlich das Event-System mit WindowMouseX() und WindowMouseY().
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 20.05.2020 14:20
von Re57
Von #PB_Event_LeftClick wußte ich bisher noch gar nichts, aber das werde ich natürlich genauso im Auge behalten wie deine weiteren Erklärungen. Im Moment habe ich zwar keine Zeit, mich damit zu beschäftigen, aber das kommt noch heute bei mir auf die Agenda. Evtl. merkt man mir ja an, daß meine PureBasic-Kenntnisse aus PB 4.00 Zeiten kommen und natürlich hat sich seitdem viel verändert. Eine Ausbildung zum Programmier hatte ich nicht, da ist es kaum zu vermeiden, daß mal Schwierigkeiten auftauchen. Auf jeden Fall vielen Dank für Deine Anregungen, ich hoffe, daß ich das später dann umsetzen kann.
Re: Wie fragt man Einzelwerte in einer List ab?
Verfasst: 20.05.2020 14:38
von NicTheQuick
Es hilft auch immer sehr zu wissen, was dein eigentliches Ziel ist. Nicht selten ist man auf dem falschen Weg zum Ziel, ohne es zu bemerken. Ich will dir auch gar nichts unterstellen, aber mehr Informationen helfen laut meiner Erfahrung trotzdem, ein Problem wesentlich schneller zu lösen.