Ich habe auch mal wieder ein Snippet!
Das sind alles so Nebenprodukte vom meinem MP3-Player.
Und wenn ich dafür sonst kein Beispiel ergoogeln konnte, muss ich halt selbst eines erstellen.
Dieses Mal geht es um das Sortieren von einem Listview (bei wNim List-Ctrl):
Code
import wNim
let app = App()
let frame = Frame(title="ListviewSort", size=(640, 480))
let panel = Panel(frame)
let idPlaylist = ListCtrl(panel, style=wLcReport or wBorderSimple, pos=(10, 10), size=(600, 400))
idPlaylist.font = Font(14, faceName="Arial", weight=wFontWeightNormal)
idPlaylist.setBackgroundColor(0x00DDDDDD)
idPlaylist.appendColumn("Interpret", width=200)
idPlaylist.appendColumn("Titel", width=200, format=wListFormatLeft)
idPlaylist.appendColumn("Laufzeit", width=110, format=wListFormatRight)
# Ein paar Beispieldaten in das Listview eintragen
idPlaylist.appendItem(["ZZ Down", "Gimme All", "03:53"])
idPlaylist.appendItem(["Johnson Twins", "Bla bla", "04:16"])
idPlaylist.appendItem(["Kniff Richard", "Yeah", "05:11"])
idPlaylist.appendItem(["Roller Stones", "Gimme Shelter", "04:03"])
idPlaylist.appendItem(["Ralph a Ville", "Moin", "03:46"])
let hImgList = ImageList(16, 16) # Imagelist erstellen
hImgList.add(Icon("shell32.dll,246")) # up-Icon
hImgList.add(Icon("shell32.dll,247")) # down-Icon
idPlaylist.setImageList(hImgList) # die Imagelist dem Listview zuordnen
var
iSortCol, iOldCol: int = -1
bSortDir: bool = false
# Callback-Funktion zum sortieren der Eintraege
proc sortCmp(item1: int; item2: int; data: int): int =
result = cmp(idPlaylist.getItemText(item1, iSortCol), idPlaylist.getItemText(item2, iSortCol))
if bSortDir: result *= -1
# Beim Klick auf ein Spalten-Header
idPlaylist.wEvent_ListColClick do (event: wEvent):
iSortCol = event.getColumn() # die Spalte ermitteln
if iSortCol == iOldCol: # wenn die gleiche Spalte wie vorher
bSortDir = not bSortDir # dann Sortier-Richtung umdrehen
else: # ansonsten
bSortDir = false # Sortier-Richtung auf aufsteigend setzen
idPlaylist.setColumnImage(iOldCol, -1) # und das vorherige Sortier-Image entfernen
iOldCol = iSortCol # die Spalte merken
idPlaylist.setColumnImage(iSortCol, if bSortDir: 1 else: 0) # Sortier-Image entsprechend der Richtung setzen
idPlaylist.sortItemsByIndex(sortCmp) # und das Listview sortieren (Callback fuer den Vergleich)
frame.center()
frame.show()
app.mainLoop()
Alles anzeigen