我幾乎每個程式都會用到
TkTreeCtrl,最常用來顯示條列式的 item,甚至還可以拿來做分頁功能的 tab。最近寫 ftp client 時想要顯示的 icon 和本機上的一樣,TkTreeCtrl 有提供 shellicon 的 package,可藉由建立 shellicon 的 element 和指定 path 來顯示檔案的 icon。
$tree element create elemImg shellicon -size small
$tree item element configure $item name elemImg -path $path
不過 ftp 的檔案在 server 上無法指定 path,所以我就先在本地端建立不同副檔名的檔案,要顯示時再依據副檔名將 path 指定到對應的檔案。在 windows 中有個 assoc 的指令可以列出目前所有副檔名,可由此資訊建立所需的檔案
C:\Documents and Settings\laby>assoc |more
.264x2pass+DvD=264x2pass+DvD_auto_file
.323=h323file
.386=vxdfile
.3g2=mplayerc.3g2
.3gp=mplayerc.3gp
在第一次啟動程式時先預先建立好對應的檔案即可
proc ::rc::create_mine_icon {mimeDir} {
file mkdir $mimeDir
close [open [file join $mimeDir mime.unknow] w]
set assocList [exec cmd /c assoc]
foreach line $assocList {
set ext [lindex [split $line "="] 0]
if { [string range $ext 0 0] eq "." } {
catch {close [open [file join $mimeDir mime$ext] w]}
}
}
}
測試建立 840 個檔案只花了約 200ms。下圖上半為預設的 icon,下半為使用 shellicon 後的效果。
沒有留言:
張貼留言