Seite 1 von 1

Linked List in Editorgadget auslesen

Verfasst: 17.02.2008 18:29
von vimike
Hallo!
Ich habe gerade mein erstes Programm, ein "Textadventure" fertig gekriegt. Eigentlich eher beta Status. Dabei habe ich auch versucht daten aus einer LinkedList vom Typ String in ein Editorgadget auszulesen Was ich auch versucht habe, es hat nicht geklappt. Weder die Hilfe, noch das Codearchiv haben etwas zu diesem Thema Hilfreiches geboten. Nun meine kurze und knappe Frage wie mache ich das?

Verfasst: 17.02.2008 18:35
von KeyKon
In der regel gilt: mit einem Code bzw. dem entscheidenden Codeschnipsel kann man besser verstehen und helfen was dein Problem is...
Aber ich nehme an du willst Daten aus einer LinkedList in einem Editorgadget anzeigen, woran hakts denn?

In der Regel sollte das hier funktionieren

Code: Alles auswählen

ForEach LinkedList()
  AddGadgetItem(EditorGadgetID,1,LinkedList())
Next
(Ungetestet)

Verfasst: 17.02.2008 18:43
von Kiffi
KeyKon hat geschrieben:

Code: Alles auswählen

AddGadgetItem(EditorGadgetID,1,LinkedList())
mit -1 klappt's besser. Dann wird der neu hinzuzufügende Eintrag
automatisch an das Ende der ItemList des EditorGadgets gehängt:

Code: Alles auswählen

AddGadgetItem(EditorGadgetID,-1,LinkedList())
Grüße ... Kiffi

Verfasst: 17.02.2008 18:44
von Tsuki-Namida
@KeyKon
wird dann nicht alles in die erste zeile gepackt?

naja fals jede element in einer anderen zeile soll sieht das ganze so aus...

Code: Alles auswählen

EditorGadget(0, x, y, Breite, Hoehe)
ForEach LinkedList()
  AddGadgetItem(0,ListIndex(LinkedList())  ,LinkedList() ) 
Next

[edit]
okay kiffi's wariante geht auch^^ er war auch etwas schneller als ich xD

Ächz

Verfasst: 17.02.2008 18:56
von vimike
Wie schnell das geht :shock: :shock: :shock: :shock: !
Ich sollte wohl etwas weiter ausholen. In die LinkedList vom Typ string wird mit den ReadfileBefehl(Eof(0)usw. Bsp. aus der Hilfe! eine Datei vom Typ Text eingelesen. Das auslesen in das Editorgadget soll auf einen Schlag oder Zeilenweise geschehen. Auf welche Weise es geht oder welche besser ist weiß ich nicht. Jedenfalls war das Höchste was ich erreichte das das Ende der Textdatei (ein paar Wörter zu sehen war). Aber auch nur weil ich mit den Memorybefehlen zusätzlich jedes Element extra einen Speicherbuffer zuwies.
Direkt hat das nie geklappt. Pro Element der Liste eine Textdatei. Mit Code kann ich leider nicht mehr dienen, da ich schon alles geändert habe. Der Tip mit der EditorgadgetID müsste eigentlich helfen. Aber wenn man statt der Linked List Selectelement angibt klappt das dann überhaupt?
Jedenfalls vielen Dank für die schnellen Antworten.

Verfasst: 17.02.2008 19:04
von KeyKon
Magix-Soft <Kain> hat geschrieben:@KeyKon: wird dann nicht alles in die erste zeile gepackt?
Hab das "-" verschwitzt^^

@vimike:

Mit SelectElement() wählst du nur ein Element aus, liest es aber nicht aus...
Um den Inhalt zu übergeben musst du eigentlich nur den namen der LinkedList mit den () hintendran nehmen...
Moment ich hab da ein Codebeispiel irgendwo auf der Platte was genau das macht was du willst (glaube ich)

Erkenntnis

Verfasst: 17.02.2008 19:16
von vimike
Ich glaube ich muß Selectelement vor dem Addgadgetitem mit dem Listindex oder Linkedlist angeben. Jedenfalls habe ich gerade in der Hilfe bei dem Befehl Listindex etwas ähnliches gefunden. Werde mich in den nächsten Tagen hinsetzen und alles nochmal versuchen und dann den Code in diesem Thread posten wenn alles klappt. Damit wie ich hoffe andere daraus ihren Nutzen ziehen können.

Verfasst: 17.02.2008 19:18
von KeyKon

Code: Alles auswählen

Enumeration
  #Gad_Editor
EndEnumeration

NewList Text.s()


If OpenWindow(0,0,0,640,480,"FileDisplay",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget) And CreateGadgetList(WindowID(0))
  
  EditorGadget(#Gad_Editor,10,10,620,460)
  
  file$ = OpenFileRequester("Textdatei auswählen!","","Textdateien|*.txt;*.ini",0)
  
  
  ;File in Liste:
   
  If ReadFile(0,file$) = 0
    End
  EndIf
  
  While Eof(0) = 0 ;Solange das Ende des Files nicht erreicht ist
    AddElement(Text()) ;Neues Elemt erstellen
    Text() = ReadString(0) ;Zeile aus dem File ins Element schreiben
  Wend
  
  CloseFile(0)
  
  ;List zum Editorgadget:
  
  ForEach Text() ;Für jedes Element von der Liste
    AddGadgetItem(#Gad_Editor,-1,Text()) ;Aus der Liste in eine Neue Zeile schreiben
  Next
  
  ;Fertig
  
  Repeat
    
    event = WaitWindowEvent()
    
    Select event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Gad_Editor
            
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
    
  ForEver
  
EndIf
Hier mein Beispiel, ich habe noch ein paar Kommentare eingefügt, das sollte so laufen...
Vll hab ich aber auch falsch verstanden was du machen willst...
Wenn du Fragen zum Code hast, frag^^

Ausprobiert

Verfasst: 17.02.2008 20:57
von vimike
Hier erst mal der Code:

NewList Test.s()
For V= 0 To 9
AddElement(Test())
If ReadFile(63,"C:\Dokumente und Einstellungen\Administrator\Desktop\nTextadventure\TW2\T"+Str(V)+".txt")
While Eof(63)= 0
C$=ReadString(63)
Test()=C$
Wend
CloseFile(63)

EndIf
Next



If OpenWindow(0,100,100,640,480,"Test",#PB_Window_SystemMenu)
WindowID=WindowID(0)

CreateGadgetList(WindowID)
W=EditorGadget(#PB_Any,0,0,400,400)


SelectElement(Test(),3)
ForEach Test()

AddGadgetItem(W,-1 ,Test() )
Next
Repeat
Event= WaitWindowEvent()
Until Event= #PB_Event_CloseWindow
EndIf

For T= 1 To 1000000000:Next t

Das Problem ist das immer nur die Enden der Textdateien sprich Elemente angezeigt werden

Verfasst: 17.02.2008 21:06
von KeyKon
Ganz einfach, es gibt nur ein element, du liest den File schon falsch in die List ein.
Du musst das AddElement() mit in die While schleife nehmen, damit für jede Zeile ein neues Element erzeugt wird...