sdx.kit打包

探討「內嵌」以及「腳本化」這兩個主題的技術-版主XO老師(熟悉的目前是 Tcl,討論內容也會環繞在 Tcl 四周,但是本版還是歡迎其他 Scripting 語言以及任何「內嵌」技術的討論。)

版主: b80203, ghost3401, XO, maa

分享到: Facebook

sdx.kit打包

文章Steven » 週六 4月 27, 2013 10:25 pm

请教下,sdx.kit打包后按键中文字变成乱码,是怎么回事(tcl用vtcl编写)谢谢。
Steven
剛學走路的小朋友
 
文章: 8
註冊時間: 週六 4月 27, 2013 10:03 pm

Re: sdx.kit打包

文章XO » 週一 4月 29, 2013 9:10 pm

這一篇可以參考一下:

Re:Personal Wiki 拿來寫「工作日誌」

簡單說:

cp950.enc big5.enc 拷貝到 unwrap 出來的 .vfs\lib\tcl8.x\encoding 資料夾裡,再打包起來即可。
eXtra Old 的是我「不是酒」哦!
제 이름은 오조휘 입니다

臉書裡依舊是 Extra.Old: http://www.facebook.com/extra.old
頭像
XO
資管系教師
 
文章: 5352
註冊時間: 週二 4月 27, 2004 12:20 pm
來自: CQ Inc.

Re: sdx.kit打包

文章Steven » 週一 4月 29, 2013 9:57 pm

谢谢老师,但我还是没有搞明白,您发来的参考网页作用。vtcl另存binary,在vfs目录中是包含cp950.enc和big5.enc码,将它编译成exe文件按钮可以显示出中文,但打包成kit文件就不行(由于需要在其它程序中运行tcl,打包成exe无法运行,只能打包成kit文件)。运行命令是sdx.exe qwrap test17.tcl (sdx.exe是从您介绍的网站上下载的)。
Steven
剛學走路的小朋友
 
文章: 8
註冊時間: 週六 4月 27, 2013 10:03 pm

Re: sdx.kit打包

文章XO » 週一 4月 29, 2013 10:09 pm

.kit 可以由 tclkit 來執行。例如: test.kit 可以用 tclkit test.kit 來執行。


前面那郭參考網頁主人翁: notebook.exe 也是一個由 sdx 打包出來的 Starpack。
當初原創也被問到支援中文問題。解法:

sdx unwrap notebook.exe 之後,在 \lib\tcl8.x\encoding 裡加入 cp950.enc 與 big5.enc。
eXtra Old 的是我「不是酒」哦!
제 이름은 오조휘 입니다

臉書裡依舊是 Extra.Old: http://www.facebook.com/extra.old
頭像
XO
資管系教師
 
文章: 5352
註冊時間: 週二 4月 27, 2004 12:20 pm
來自: CQ Inc.

Re: sdx.kit打包

文章Steven » 週一 4月 29, 2013 10:34 pm

谢谢老师。
sdx.exe qwrap test17.tcl打包成kit,sdx.exe unwrap test17.kit解压kit(没有big5.enc,将它加入到lib目录下),再打包目录sdx.exe wrap test17.kit(看到kit明显变大了,应该是包含enc文件了)但运行出来按键仍然不显示中文,还是乱码。
Steven
剛學走路的小朋友
 
文章: 8
註冊時間: 週六 4月 27, 2013 10:03 pm

Re: sdx.kit打包

文章XO » 週二 4月 30, 2013 10:31 am

中文所需的 cp950.enc 與 big5.enc 是在 Tclkit 的 runtime 環境內。
用 sdx 打包出來的 .kit 檔叫做 starkit,進一步指定 -runtime tclkit.exe 再一次 wrap 出來的叫 starpack (.exe 檔)。
.enc 是擺放在 starpack 的 \lib\tcl8.x\encoding 資料夾裡的,放到 .kit 的 lib 應該沒用。

如果做成 .kit 去執行: tclkit test17.kit 的話,關鍵是 tclkit.exe (這個本身也是 starpack) 裡頭要有 big5.enc 或 cp950.enc,不是塞在你打包出來的 test17.kit 這個 starkit 裡的。

如果你是要由其他 Tcl 執行環境來啟動 test17.kit,則中文問題要在那郭 Tcl 執行環境裡解決。

你是用 vTcl ... 剛剛回顧老文章,本想幫你介紹一位高手的,結果發現他舊文章裡所附的部落格、還有許多網址都失聯了...

Visual Tcl 1.6.1 加强版
eXtra Old 的是我「不是酒」哦!
제 이름은 오조휘 입니다

臉書裡依舊是 Extra.Old: http://www.facebook.com/extra.old
頭像
XO
資管系教師
 
文章: 5352
註冊時間: 週二 4月 27, 2004 12:20 pm
來自: CQ Inc.

Re: sdx.kit打包

文章Steven » 週日 5月 05, 2013 7:03 pm

发现个其它tcl是可以显示中文按键的,代码如下 不知道vtcl在哪增加的功能,麻烦老师看看。
代碼: 選擇全部
if {![info exists vTcl(sourcing)]} {

    # Provoke name search
    catch {package require bogus-package-name}
    set packageNames [package names]

    package require Tk
    switch $tcl_platform(platform) {
   windows {
            option add *Button.padY 0
   }
   default {
            option add *Scrollbar.width 10
            option add *Scrollbar.highlightThickness 0
            option add *Scrollbar.elementBorderWidth 2
            option add *Scrollbar.borderWidth 2
   }
    }
   
    # Needs Itcl
    package require Itcl

    # Needs Itk
    package require Itk

    # Needs Iwidgets
    package require Iwidgets

    switch $tcl_platform(platform) {
   windows {
            option add *Pushbutton.padY         0
   }
   default {
       option add *Scrolledhtml.sbWidth    10
       option add *Scrolledtext.sbWidth    10
       option add *Scrolledlistbox.sbWidth 10
       option add *Scrolledframe.sbWidth   10
       option add *Hierarchy.sbWidth       10
            option add *Pushbutton.padY         2
        }
    }
   
}

#############################################################################
# Visual Tcl v1.60 Project
#


#############################################################################
# vTcl Code to Load Stock Fonts


if {![info exist vTcl(sourcing)]} {
set vTcl(fonts,counter) 0
#############################################################################
## Procedure:  vTcl:font:add_font

proc ::vTcl:font:add_font {font_descr font_type {newkey {}}} {
    ## This procedure may be used free of restrictions.
    ##    Exception added by Christian Gavin on 08/08/02.
    ## Other packages and widget toolkits have different licensing requirements.
    ##    Please read their license agreements for details.

    if {[info exists ::vTcl(fonts,$font_descr,object)]} {
        ## cool, it already exists
        return $::vTcl(fonts,$font_descr,object)
    }

     incr ::vTcl(fonts,counter)
     set newfont [eval font create $font_descr]
     lappend ::vTcl(fonts,objects) $newfont

     ## each font has its unique key so that when a project is
     ## reloaded, the key is used to find the font description
     if {$newkey == ""} {
          set newkey vTcl:font$::vTcl(fonts,counter)

          ## let's find an unused font key
          while {[vTcl:font:get_font $newkey] != ""} {
             incr ::vTcl(fonts,counter)
             set newkey vTcl:font$::vTcl(fonts,counter)
          }
     }

     set ::vTcl(fonts,$newfont,type)       $font_type
     set ::vTcl(fonts,$newfont,key)        $newkey
     set ::vTcl(fonts,$newfont,font_descr) $font_descr
     set ::vTcl(fonts,$font_descr,object)  $newfont
     set ::vTcl(fonts,$newkey,object)      $newfont

     lappend ::vTcl(fonts,$font_type) $newfont

     ## in case caller needs it
     return $newfont
}

#############################################################################
## Procedure:  vTcl:font:getFontFromDescr

proc ::vTcl:font:getFontFromDescr {font_descr} {
    ## This procedure may be used free of restrictions.
    ##    Exception added by Christian Gavin on 08/08/02.
    ## Other packages and widget toolkits have different licensing requirements.
    ##    Please read their license agreements for details.

    if {[info exists ::vTcl(fonts,$font_descr,object)]} {
        return $::vTcl(fonts,$font_descr,object)
    } else {
        return ""
    }
}

vTcl:font:add_font \
    "-family helvetica -size 12 -weight bold" \
    stock \
    vTcl:font5
vTcl:font:add_font \
    "-family lucida -size 18" \
    stock \
    vTcl:font8
}
#############################################################################
# vTcl Code to Load User Fonts

vTcl:font:add_font \
    "-family \u6977\u4F53_GB2312 -size 18 -weight bold -slant roman -underline 0 -overstrike 0" \
    user \
    vTcl:font12
Steven
剛學走路的小朋友
 
文章: 8
註冊時間: 週六 4月 27, 2013 10:03 pm

Re: sdx.kit打包

文章XO » 週一 5月 06, 2013 10:33 am

PO 文裡張貼程式前後要加上 Code 標籤才可以保留原來的內縮對齊。
編輯文章時,編輯區上方有一些按鈕,要加註標籤,僅需... 例如:將程式點選起來,去按那郭 Code 按鈕即可。

程式有空找機會再幫你看... 不過剛剛把你程式碼加註時看到倒豎那幾行怎麼有字型是用 GB2312 你是用簡體字嗎?
如果你說你用的 Tcl 中文沒問題,只是跑 vTcl 時中文有問題,會不會在指定字型上沒設好!?
eXtra Old 的是我「不是酒」哦!
제 이름은 오조휘 입니다

臉書裡依舊是 Extra.Old: http://www.facebook.com/extra.old
頭像
XO
資管系教師
 
文章: 5352
註冊時間: 週二 4月 27, 2004 12:20 pm
來自: CQ Inc.

Re: sdx.kit打包

文章Steven » 週一 5月 06, 2013 10:39 pm

老师你好,是用简体字。vtcl中设置用一样的字体也不行。那个tcl程式将中文转化成unicode代码了,不知道是怎么转换的。
Steven
剛學走路的小朋友
 
文章: 8
註冊時間: 週六 4月 27, 2013 10:03 pm


回到 內嵌與腳本化(Embedding & Scripting)

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 2 位訪客