Tutorial 8: Mehr Listboxes und GadgetItems
The MaxGUI Beginner Tutorial Series - Tutorial 8: Mehr Listboxes und GadgetItems
(c) Assari Dec 26 2005
Ins Deutsche übersetzt von simi
In diesem Tutorial werden wir die zusätzlichen GadgetItem-Funktionen anschauen, die uns MaxGUI zur Verfügung stellt um Listboxen zu manipulieren. Gebräuchlich sind Listboxen um dem Benutzer eine Auswahl zu präsentieren, aus der er sich entscheiden kann.
Die Hilfe listet uns folgende relevante Funktionen auf: AddGadgetItems, ClearGadgetItems, ModifyGadgetItems, SelectGadgetItems, SelectedGadgetItems und RemoveGadgetItems.
Bevor wir starten, lass uns sehen, wie wir unsere Listbox schnell füllen können.
SuperStrict Import MaxGui.Driver Local MyWindow:TGadget=CreateWindow("ListBox-Beispiel", 200,200,320,240) Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow) For Local i:Int=1000 To 1050 AddGadgetItem ListBox,i Next Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End End Select Forever |
Beachte dass ich eine For/Next-Schleife hinzugefügt habe, um schnell Zahlen in unsere Box einzufügen. Beachte auch, dass die Listbox jetzt eine Scrollbar hat hat, weil die Anzahl der Items die Höhe der Listbox übersteigt.
|
Jetzt, wo wir eine längere Liste haben, können wir mit dem Manipulieren starten.
Lass uns mit SelectedGadgetItem starten.
SelectedGadgetItem hat die folgende Syntax
Function SelectedGadgetItem(gadget:TGadget) |
Wir benutzen diese Funktion wie folgt:
SuperStrict Import MaxGui.Driver Local MyWindow:TGadget=CreateWindow("ListBox-Beispiel", 200,200,320,240) Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow) For Local i:Int=1000 To 1050 AddGadgetItem ListBox,i Next Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_GADGETACTION SetStatusText MyWindow, "Ausgewählter Item="+SelectedGadgetItem(ListBox) End Select Forever |
Beachte, dass der Index von dem Item, den wir angeklickt haben, in der Statuszeile erscheint. Nicht aber der Name/Text!
|
Um den Itemtext zu bekommen, müssen wir eine andere Funktion, GadgetItemText, mit folgender Syntax benutzen.
Function GadgetItemText$( gadget:TGadget,index ) |
Wir benutzen dann diese Funktion so:
SuperStrict Import MaxGui.Driver Local MyWindow:TGadget=CreateWindow("ListBox-Beispiel", 200,200,320,240) Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow) For Local i:Int=1000 To 1050 AddGadgetItem ListBox,i Next Local s:String Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_GADGETACTION s=GadgetItemText(ListBox,SelectedGadgetItem(ListBox)) SetStatusText MyWindow, SelectedGadgetItem(ListBox) + ":" + s End Select Forever |
Beachte dass man jetzt den Itemtext sehen kann. Vergiss nicht, dass SelectedGadgetItem uns nur den Index (den Ort in der Liste) zurückgibt. Du musst GadgetItemText benutzen, um den Text zu erfahren.
|
Die nächste Funktion, die wir betrachten wollen ist RemoveGadgetItem, die folgende Syntax hat:
Function RemoveGadgetItem( gadget:TGadget,index ) |
Wir können einerseits einen Item programmtechnisch entfernen lassen, oder den User entscheiden lassen. Lass uns beide Methoden anschauen.
SuperStrict Import MaxGui.Driver Local MyWindow:TGadget=CreateWindow("ListBox-Beispiel", 200,200,320,240) Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow) For Local i:Int=1000 To 1050 AddGadgetItem ListBox,i Next RemoveGadgetItem Listbox,3 Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End End Select Forever |
Jetzt fehlt der Item "1003" in unserer Liste.
|
Um einen Item vom Benutzer zu löschen, können wir folgendes machen.
SuperStrict Import MaxGui.Driver Local MyWindow:TGadget=CreateWindow("ListBox-Beispiel", 200,200,320,240) Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow) For Local i:Int=1000 To 1050 AddGadgetItem ListBox,i Next Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_GADGETACTION RemoveGadgetItem(Listbox,SelectedGadgetItem(ListBox)) End Select SetStatusText MyWindow, "Anzahl Items in der Liste="+CountGadgetItems(ListBox) Forever |
Im Screenshot kannst du sehen, dass ich 3 Items entfernt habe. Also sind noch 48 Items übrig. (Beachte dass wir 51 Items hatten, 0-50)
|
Die Zeile, die unser Item löschen liess, ist die gleiche wie im vorherigen Beispiel. Der RemoveGadgetItem-Befehl muss wissen, welchen Item er löschen muss. In diesem Beispiel benutzten wir SelectedGadgetItem um den zu löschenden Item anzugeben.
RemoveGadgetItem(Listbox,SelectedGadgetItem(ListBox)) |
Ich habe auch einen weiteren Befehl, CountGadgetItems, benutzt. Er gibt die Anzahl der Einträge in der Liste zurück.
SetStatusText MyWindow, "Anzahl Items in der Liste="+CountGadgetItems(ListBox) |
SelectGadgetItem (nicht mit SelectedGadgetItem zu verwechseln!) erlaubt uns einen Eintrag in der Liste auszuwählen. Nichts Spezielles. Du benutzt es so:
SuperStrict Import MaxGui.Driver Local MyWindow:TGadget=CreateWindow("ListBox-Beispiel", 200,200,320,240) Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow) For Local i:Int=1000 To 1050 AddGadgetItem ListBox,i Next SelectGadgetItem ListBox,3 Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End End Select Forever |
Beachte dass nun unser 4. Eintrag ausgewählt ist (1003 ist hervorgehoben).
|
Die nächste Funktion, ClearGadgetItems ist einfach. Aber sie kann gefährlich sein, wenn man sie nicht vorsichtig benutzt.
SuperStrict Import MaxGui.Driver Local MyWindow:TGadget=CreateWindow("ListBox-Beispiel", 200,200,320,240) Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow) For Local i:Int=1000 To 1050 AddGadgetItem ListBox,i Next Repeat WaitEvent() Select EventID() Case EVENT_WINDOWCLOSE End Case EVENT_GADGETACTION ClearGadgetItems(Listbox) End Select Forever |
Mit einem Klick ist die ganze Liste weg.
|
Zum Schluss...
Dieser ListBox-Gadget hat viels anzubieten, und wird deshalb nochmals im nächsten Tutorial aufgegriffen. Wir werden zwei weitere, wichtige Funktionen anschauen. Die Themen, die wir im Moment anschauen, werden auch für andere Gadgets relevant sein.
In diesem Tutorial haben wir folgendes gelernt.
- Wir können Items in eine Listbox mit einer for/next-Schleife und AddGadgetItem hinzufügen.
- Wir haben gelernt, wie wir mit AddGadgetItem, ClearGadgetItems, SelectGadgetItem, SelectedGadgetItem und RemoveGadgetItem verschiedenste Sachen mit unseren Einträgen machen könne.