Seite 1 von 1

LinkedList in Prozedur

Verfasst: 19.06.2005 16:17
von Jake
In der PureBasic Hilfe steht das LinkedLists Global sind. Warum kann ich dann nicht darauf zugreifen?
Ich habe mal meinen ganzen Code hier reingestellt damit ihr sehen könnt was passiert.
Wenn ich den Inhalt der Przedur in einem Gosub aufrufe dann klappts.

Code: Alles auswählen

Structure Daten
  Name.s
  Kords.s
  Alli.s
  Pkt.l
  Kom.s
  Entf.f
EndStructure

NewList Eintrag.Daten()

Procedure Add()
  ResetList(Eintrag.Daten())
  For a = 1 To CountList(Eintrag.Daten())
    NextElement(Eintrag.Daten())
    AddGadgetItem(0,-1, Eintrag.Daten\Name +Chr(10)+ Eintrag.Daten\Kords +Chr(10)+ Eintrag.Daten\Alli +Chr(10)+ Str(Eintrag.Daten\Pkt) +Chr(10)+  Eintrag.Daten\Kom +Chr(10)+ StrF(Eintrag.Daten\Entf))
  Next a
EndProcedure

Procedure Sort()
  
EndProcedure

;1.Eintrag
AddElement(Eintrag.Daten())
Eintrag.Daten\Name = "Manuka"
Eintrag.Daten\Kords = "5:3:7"
Eintrag.Daten\Alli = "ESA"
Eintrag.Daten\Pkt = 720
Eintrag.Daten\Kom = "Kommentar"
Eintrag.DAten\Entf = 1.41

;2. Eintrag
AddElement(Eintrag.Daten())
Eintrag.Daten\Name = "Karola"
Eintrag.Daten\Kords = "12:134:16"
Eintrag.Daten\Alli = "TESA"
Eintrag.Daten\Pkt = 12
Eintrag.Daten\Kom = "BlaBla"
Eintrag.DAten\Entf = 5

;3. Eintrag
AddElement(Eintrag.Daten())
Eintrag.Daten\Name = "Nikolaus"
Eintrag.Daten\Kords = "122:34:1"
Eintrag.Daten\Alli = "-TS-"
Eintrag.Daten\Pkt = 27634
Eintrag.Daten\Kom = "totschlagen"
Eintrag.DAten\Entf = 230

;4. Eintrag
AddElement(Eintrag.Daten())
Eintrag.Daten\Name = "Synapse"
Eintrag.Daten\Kords = "1:1:1"
Eintrag.Daten\Alli = "LEA#"
Eintrag.Daten\Pkt = 7
Eintrag.Daten\Kom = "überfallen"
Eintrag.DAten\Entf = 9.89949

OpenWindow(0, 0, 0, 500, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "ListIconSortTest")
CreateGadgetList(WindowID(0))
  CreatePopupMenu(0)
    MenuItem(1, "Sortierung")
    DisableMenuItem(1, 1)
    MenuBar()
    MenuItem(2, "Spielername")
    MenuItem(3, "Koordinaten")
    MenuItem(4, "Allianz")
    MenuItem(5, "Punkte")
    MenuItem(6, "Kommentar")
    MenuItem(7, "Entfernung")
  ListIconGadget(0, 10, 10, 480, 180, "Spielername", 70 , #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines)
    AddGadgetColumn(0, 1, "Koordinaten", 70)
    AddGadgetColumn(0, 2,"Allianz",60)
    AddGadgetColumn(0, 3,"Punkte",50)
    AddGadgetColumn(0, 4,"Kommentar",155)
    AddGadgetColumn(0, 5,"Entfernung",70)

Add()

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #WM_RButtonDown
      DisplayPopupMenu(0, WindowID(0))
    Case #PB_Event_Gadget
      Select EventType()
        Case #PB_EventType_RightClick
          DisplayPopupMenu(0, WindowID(0))
      EndSelect
  EndSelect
Until Event = #PB_EVent_Closewindow
Ich weiß das das Theme o Ä. hier schon behandelt wurde aber dea hab ich nicht so ganz verstanden.

Verfasst: 19.06.2005 16:42
von freedimension
Deine Syntax der Verwendung von Linked Lists war einfach falsch, so geht's:

Code: Alles auswählen

Structure Daten
  name.s 
  Kords.s 
  Alli.s 
  Pkt.l 
  Kom.s 
  Entf.f 
EndStructure 

NewList Eintrag.Daten()

Procedure Add() 
  ResetList(Eintrag()) 
  For a = 1 To CountList(Eintrag()) 
    NextElement(Eintrag()) 
    AddGadgetItem(0,-1, Eintrag()\name +Chr(10)+ Eintrag()\Kords +Chr(10)+ Eintrag()\Alli +Chr(10)+ Str(Eintrag()\Pkt) +Chr(10)+  Eintrag()\Kom +Chr(10)+ StrF(Eintrag()\Entf)) 
  Next
EndProcedure 

Procedure Sort() 
  
EndProcedure 

;1.Eintrag 
AddElement(Eintrag()) 
Eintrag()\name = "Manuka" 
Eintrag()\Kords = "5:3:7" 
Eintrag()\Alli = "ESA" 
Eintrag()\Pkt = 720 
Eintrag()\Kom = "Kommentar" 
Eintrag()\Entf = 1.41 

;2. Eintrag 
AddElement(Eintrag()) 
Eintrag()\name = "Karola" 
Eintrag()\Kords = "12:134:16" 
Eintrag()\Alli = "TESA" 
Eintrag()\Pkt = 12 
Eintrag()\Kom = "BlaBla" 
Eintrag()\Entf = 5 

;3. Eintrag 
AddElement(Eintrag()) 
Eintrag()\name = "Nikolaus" 
Eintrag()\Kords = "122:34:1" 
Eintrag()\Alli = "-TS-" 
Eintrag()\Pkt = 27634 
Eintrag()\Kom = "totschlagen" 
Eintrag()\Entf = 230 

;4. Eintrag 
AddElement(Eintrag()) 
Eintrag()\name = "Synapse" 
Eintrag()\Kords = "1:1:1" 
Eintrag()\Alli = "LEA#" 
Eintrag()\Pkt = 7 
Eintrag()\Kom = "überfallen" 
Eintrag()\Entf = 9.89949 

OpenWindow(0, 0, 0, 500, 200, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "ListIconSortTest") 
CreateGadgetList(WindowID(0)) 
CreatePopupMenu(0) 
MenuItem(1, "Sortierung") 
DisableMenuItem(1, 1) 
MenuBar() 
MenuItem(2, "Spielername") 
MenuItem(3, "Koordinaten") 
MenuItem(4, "Allianz") 
MenuItem(5, "Punkte") 
MenuItem(6, "Kommentar") 
MenuItem(7, "Entfernung") 
ListIconGadget(0, 10, 10, 480, 180, "Spielername", 70 , #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines) 
AddGadgetColumn(0, 1, "Koordinaten", 70) 
AddGadgetColumn(0, 2,"Allianz",60) 
AddGadgetColumn(0, 3,"Punkte",50) 
AddGadgetColumn(0, 4,"Kommentar",155) 
AddGadgetColumn(0, 5,"Entfernung",70) 

Add()
ResetList(Eintrag()) 
 
Repeat
  Event = WaitWindowEvent() 
  Select Event 
    Case #WM_RBUTTONDOWN 
      DisplayPopupMenu(0, WindowID(0)) 
    Case #PB_Event_Gadget 
      Select EventType() 
        Case #PB_EventType_RightClick 
          DisplayPopupMenu(0, WindowID(0)) 
      EndSelect 
  EndSelect 
Until Event = #PB_Event_CloseWindow

Verfasst: 20.06.2005 00:25
von Jake
Blöder Fehler das gleiche ist mir auch schon mit verschachtelten Strukturen passiert für die ich dann ein Array angelegt hatte.
Kann mir einfach nicht merken daß "Daten" in diesem Fall dann als Variablen-Typ anzusehen ist.

Danke

Verfasst: 20.06.2005 13:29
von NicTheQuick
:o
Also wenn ich sowas nur sehe:

Code: Alles auswählen

Procedure Add() 
  ResetList(Eintrag()) 
  For a = 1 To CountList(Eintrag()) 
    NextElement(Eintrag()) 
    AddGadgetItem(0,-1, Eintrag()\name +Chr(10)+ Eintrag()\Kords +Chr(10)+ Eintrag()\Alli +Chr(10)+ Str(Eintrag()\Pkt) +Chr(10)+  Eintrag()\Kom +Chr(10)+ StrF(Eintrag()\Entf)) 
  Next 
EndProcedure 
Das ist ja langsam wie eine Sau.

Das macht man wenn schon so:

Code: Alles auswählen

Procedure Add() 
  ForEach Eintrag()
    AddGadgetItem(0,-1, Eintrag()\Name +Chr(10)+ Eintrag()\Kords +Chr(10)+ Eintrag()\Alli +Chr(10)+ Str(Eintrag()\Pkt) +Chr(10)+  Eintrag()\Kom +Chr(10)+ StrF(Eintrag()\Entf)) 
  Next 
EndProcedure
Oder so:

Code: Alles auswählen


Procedure Add() 
  ResetList(Eintrag())
  While NextElement(Eintrag())
    AddGadgetItem(0,-1, Eintrag()\Name +Chr(10)+ Eintrag()\Kords +Chr(10)+ Eintrag()\Alli +Chr(10)+ Str(Eintrag()\Pkt) +Chr(10)+  Eintrag()\Kom +Chr(10)+ StrF(Eintrag()\Entf)) 
  Next 
EndProcedure 
Ersteres steht so übrigens auch in der Hilfe drin. :wink:

Verfasst: 20.06.2005 22:30
von Andre
NicTheQuick hat geschrieben:Ersteres steht so übrigens auch in der Hilfe drin. :wink:
Hä, des koa doch net war sei... :wink:

Werds mal überprüfen. 8)

Verfasst: 20.06.2005 23:44
von NicTheQuick
@Andre:
Ich meine damit meinen ersten Code. Dieser ist allerdings der zweite, wenn man von allen drei Codes ausgeht, die in meinem Post stehen.
Damit habe ich also nicht gemeint, dass das in der Hilfe auch mit dem [c]CountList()[/c] und einer [c]For[/c]-[c]Next[/c]-Schleife gemacht ist. :wink: