MaxGUI - Treeview Item einen Type zuweisen?
Übersicht

CO2ehemals "SirMO"Betreff: MaxGUI - Treeview Item einen Type zuweisen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe mal wieder ein Problem mit der TreeView in BlitzMax: Ich habe einen Type TFile, dieser sieht wie folgt aus BlitzMax: [AUSKLAPPEN] Type TFile Nun kann der Benutzer durch anwählen des Menüpunktes "Datei hinzufügen" eine neue Datei hinzufügen. Die Funktion dazu sieht wie folgt aus BlitzMax: [AUSKLAPPEN] Function TV_AddFile(Name:String, Size:Int) (Zur Erklärung: - mw_archivsicht: Dies ist die TreeView - mw_stdarchiv: Dies ist das StandartArchiv (Der Oberste Knoten) - Name: Hier wird der Name übergeben (Das ergebnis von StripDir(Requestfile(...))) - Size: Hier wird die Größe der Datei übergeben (Das Ergebnis von Filesize(...))) Jetzt möchte ich die ID herausfinden, die das Objekt kriegen soll. Diese ist wie folgt aufgebaut: Dazu muss ich herausfinden, welche ID das Verzeichnis in dem die Datei enthalten ist, bekommen hat, um dann die Einträge in dem Verzeichnis zu zählen und den wert dann hinter die andere ID - getrennt durch einen Punkt - zu schreiben. Wie kriege ich das raus? Ich kann ja nicht einfach die Liste durchgehen und nach dem Namen des momentan angeklickten Nodes suchen, da ja auch mehrere Objekte den gleichen Namen haben können... (Ich hoffe man kann mein Problem verstehen ![]() |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Nodes von TreeViews der MaxGUI sind meines Wissens nach TGadget-Objekte. Diese besitzen für diese und ähnliche Zwecke ein Feld extra:Object, in welchem du beispielsweise die ID als String oder in einer anderen Klasse speichern kannst.
Beim Erstellen der Verzeichnisse also kannst du einfach die ID in diesem Feld speichern, und später beim Abrufen des ausgewählten Nodes wieder auslesen. Sieh dir hierzu am besten auch die Befehle SetGadgetExtra und GadgetExtra an, welche eben dieses Feld verwenden. |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Speicher nicht den ID String sondern gleich das richtige TFile-Objekt - das unnötige heraussuchen kannst du sparen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
zusätzlich, um die lesbarkeit zu erhöhe würde ich dann die führenden
Nullen entfernen. Außerdem steht im Titel schon v1.0? ist zwar offtopic aber wozu versionieren, wenn von vornherein eh schon 1.0 feststeht :> und wenn es darum geht, wie du so eine ID bilden kannst: bau eine funktion, definieren einen String, gehe die childs des funktionsparameter Nodes durch der dein TFile sucht. als start gibst du den rootpunkt des Treeviews an, das alle "Top-Level"-Nodes ohne parent (bis auf root) durchgegangen werden, ist das ausgewählte Node in einem Ordner dieser Nodes, füge die ID an den String an. übergib den String an die gleiche funktion (rekursion) und als ausgangspunkt den verzeichnis node usw. am ende gibt jedes programm die ID zurück und die zuerst aufgerufene funktion (sollte sich erst beenden, wenn alle anderen rekursions-funktionen durchlaufen worden) gibt den endgültigen string zurück Treeviews haben - afaik - kein extra Objekt (zumindest in meiner BMax version) und wenn das bei dir auch der fall ist, kannst du die Code: [AUSKLAPPEN] gadget=addTreeViewNode
mapInsert(map,gadget,inst:TFile) erstellten gadgets in einer TMap mit den TFile instanzen mappen und mit Code: [AUSKLAPPEN] MapValueForKey(map,TGadget( EventExtra() ))
wieder suchen EDIT: alles klar, die aktuellen Versionen von maxGUI haben den extra parameter Grüße |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
jsp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie Xeres bereits gesagt hat, man speichert das TFile object im GadgetExtra, alles andere ist viel zu aufwendig.
Bleibt eigentlich nur anzumerken, dass das TGadget auch noch ein Context Feld besitzt. Das wurde von vielen benutzt bevor das Extra Feld entstanden ist. Es hat kein Getter und Setter und deshalb ist das Extra Feld immer vorzuziehen, aber wie es manchmal eben ist, kann es trotzdem sehr hilfreich sein. Es kann bei allen Gadgets benutzt werden ausser dem TextField und der TextArea, die benutzen es für ihren Filter. Möchte man zwei Objecte oder ein Object und ein String speichern, braucht man keine extra Klasse anlegen oder sich sonst wie verrenken, das ist oft sehr praktisch. MYNode.Context=Pfad$ S:String=String(MyNode.Context) |
||
Logic Gui Professional a Gui Designer for MaxGui |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok,
Das mit dem Extra-Objekt habe ich noch nicht wirklich verstanden... Habe nun folgende Funktionen gebastelt: Datei hinzufügen BlitzMax: [AUSKLAPPEN] Function TV_AddFile(Name:String, Size:Int) (Erklärung: Siehe oben) So, jetzt habe ich aber ein Problem beim Informationen-wieder-auslesen, hier meine momentane Funktion (bei der das Programm immer abschmirt ![]() Function TV_GetInformation() (Erklärung: - FileInfoWindow: Ist ein Extra-Fenster, welches eine Listbox enthält. Hier werden die Informationen zur ausgewählten Datei angezeigt. - fi_InfoBox: Die oben genannte Listbox) Wie kann ich denn die Daten aus dem Extra-Parameter wieder auslesen? |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Das mit dem Extra-Objekt habe ich noch nicht wirklich verstanden...
Das Extra-Objekt ist ein sehr nützlicher Wert, der zu jedem Gadget angibt, was du als Programmierer damit assoziierst. Mit SetGadgetExtra weist du ein Objekt zu; mit GadgetExtra liest du es wieder aus. Außerdem gibt es mit jedem Event ein Extra Feld (CurrentEvent.extra bzw. EventExtra()), dass genau diesen Wert enthält (der GadgetExtra-Wert von der Event-Source). Der Extra-Wert kann (manchmal) auch beim Erstellen des Gadgets angegeben werden. ZEVS |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dem Gadget habe ich ja Extra-Objekt zugewiesen (Siehe TV_AddFile - Funktion). Nur habe ich momentan das Problem, dieses Extra-Objekt wieder "auszulesen". Ich habe mal ein wenig rumprobiert, leider ohne Erfolg... Hier die beiden Funktionen:
1.) TV_AddFile BlitzMax: [AUSKLAPPEN] Function TV_AddFile(Name:String, Size:Int) 2.) TV_GetInformation BlitzMax: [AUSKLAPPEN] Function TV_GetInformation() Wenn ich dann den Code ausführe und die Informationen zu einer Datei einsehen will, bekomme ich folgenden Fehler Zitat: Unhandled Exception:Attempt to access field or method of Null object
Markiert wird dann die Zeile BlitzMax: [AUSKLAPPEN] AddGadgetItem(fi_InfoBox, "Name: " + TempObj.Name) (In der TV_GetInformation - Funktion)
|
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
auch wenn ich dem extra einen String zuweise und es anzeigen lasse,
ist extra="". Hab dann mal bei meinem Projekt nachgeschaut und es so gemacht, wie bereits erklärt und in einer TMapdie gadgets den TFile (in deinem Fall) zugeordnet und dann gesucht Code: [AUSKLAPPEN] Import MaxGui.Drivers
Strict Local window:TGadget=CreateWindow("My Window",50,50,240,240,Null,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS) Local treeview:TGadget=CreateTreeView(5,5,ClientWidth(window)-10,ClientHeight(window)-10,window) Local root:TGadget=TreeViewRoot(treeview) Local help:TGadget=AddTreeViewNode("Help",root) AddTreeViewNode "Topic 2",help,,"Hallo" While WaitEvent() Print CurrentEvent.ToString() Select EventID() Case EVENT_WINDOWCLOSE End End Select Wend Auch ein Update auf die aktuellste Maxgui version hilft bei mir nicht :/ |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group