- Offizieller Beitrag
In der wNim Demo war kein Bsp, für das Treeview. Hier habe ich mal eines erstellt. Ich generiere Item-Namen und Bilder aus dem angehängten PNG-Ordner. Einfach im Pfad der *.nim speichern.
Code
import wnim, os, strutils
var
snames = newSeq[string]() # Treeview-Text & StaticText
sbmp = newSeq[wBitmap]() # StaticBitmap
sti = newSeq[wTreeItem]() # Treeview-Item
il16 = ImageList(size=(16,16), mask=false, initialCount=0) # Image List
let pathImg = r".\png" # Pfad mit *.png
for file in pathImg.walkDir():
snames.add(file.path.splitPath().tail.split('.')[0]) # Name der Datei ohne Suffix
sbmp.add(Bitmap(Image(file.path).scale(48,48))) # Bmp für StaticBmp
il16.add(Bitmap(Image(file.path).scale(16,16))) # Bmp für Image List
let app = App()
let frame = Frame(title="TreeTab")
let panelHead = Panel(frame)
let sbhead = StaticBitmap(panelHead, bitmap=sbmp[0], size=(48,48))
let fontComic = Font(faceName="Comic Sans MS", weight=wFontWeightBold, pointSize=18)
let sthead = StaticText(panelHead, label=snames[0])
sthead.setFont(fontComic)
let stHeight = sthead.getBestSize().height
let panelTab = Panel(frame)
let nbtab = NoteBook(panelTab)
let panelTree = Panel(frame)
let tc = TreeCtrl(panelTree) # Treeview
tc.setImageList(il16) # Image List zuweisen
let tri = tc.getRootItem() # Root-Item abfragen
var idx = 0 # Index für Zugriff auf Sequenzen (Text, Images)
for i in 0..sNames.len() - 1:
sti.add(tc.appendItem(tri, text=sNames[i], image=idx)) # Item erstellen und Image anhand des Index in der Image List zuweisen
idx = idx + 1
tc.setFocus()
proc layout() =
frame.layout:
panelHead:
left = 0
top = 0
height = frame.height / 5
width = 3 * (frame.width / 5)
panelTab:
left = 0
top = panelHead.bottom
bottom = frame.bottom
width = 3 * (frame.width / 5)
panelTree:
left = 3 * (frame.width / 5)
top = 0
height = frame.height
width = 2 * (frame.width / 5)
panelHead.layout:
sbhead:
left = panelHead.left + 10
centerY = panelHead.centerY
height = 48
width = 48
sthead:
left = panelHead.left + 70
centerY = sbhead.centerY
height = stHeight
width = panelHead.width - 20
panelTab.layout:
nbtab:
left = panelTab.left + 10
top = panelTab.top + 10
width = panelTab.width - 20
height = panelTab.height - 20
panelTree.layout:
tc:
left = panelTree.left + 10
top = panelTree.top + 10
width = panelTree.width - 20
height = panelTree.height - 20
tc.wEvent_TreeSelChanged do ():
for i in 0..len(sti) - 1:
if isSelected(sti[i]):
sbhead.setBitmap(sbmp[i])
sthead.label = replace(replace(sNames[i], "&", "&&"), "-", " ")
frame.wEvent_Size do ():
layout()
frame.wIdExit do ():
frame.delete()
frame.minSize = (590,310)
layout()
frame.center()
frame.show()
app.mainLoop()
Alles anzeigen
Und so sieht das aus: