2010-01-20

TkTreeCtrl & shellicon

我幾乎每個程式都會用到 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 後的效果。


沒有留言:

張貼留言