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
mit -1 klappt's besser. Dann wird der neu hinzuzufügende Eintrag
automatisch an das Ende der ItemList des EditorGadgets gehängt:
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

!
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...