Make your own free website on Tripod.com



讓游標恢復原形

ChinEase

    事先聲明,您可以直接點擊這裡看處理方式就可以了,前面的部分或許沒有意義 :-)
    有些時候您在使用中文化軟體的過程中時會發現一些原版中並不存在的界面顯示問題,比如拖動視窗面板之間的分隔欄時游標放大 N 倍,打印預覽時那個放大鏡圖示真的放大了 :-)

1.gif (632 字節) 2.gif (634 字節) 3.gif (1049 字節) 4.gif (1089 字節)

放大了的放大鏡 :)

正常的放大鏡

放大 N 倍的游標

正常的游標

    這些現象在我們經常使用的工具 UE32 和 CUTEFTP 等中文化軟體中會出現,我在最近中文化 TEXTPAD 時也發現了這個問題,經過分析找到了原因,其實應該說這不是中文化的失誤,而是中文化工具編譯的 BUG,經過研究也找到了處理辦法,下面簡單說說:
    因為我們做 VC 類軟體中文化時最常用最好用的工具自然是 VC++,經過 VC++ 編譯的程式一般最穩定也不容易出錯,但 VC++ 中文化程式時有個比較大的 BUG 就是遺失對話框資料(阿濤兄的文章敘述的很清楚了 :);那麼這個游標變形的問題可能是 VC++ 做中文化時的另一個 BUG,而且在 VC++ 中很難發現:

5.gif (4737 字節)

6.gif (1449 字節)

EXESCOPE 中原版
cursor 資源 30980 的顯示

7.gif (1296 字節)

VC++ 中 cursor 資源 30980 的顯示(中文化前後均如此)

EXESCOPE 中 VC 中文化版
cursor 資源 30980 的顯示

8.gif (1687 字節)

9.gif (1703 字節)

BC++ 簡版中原版 cursor 資源 30980 的顯示

BC++ 簡版中 VC 中文化版 cursor 資源 30980 的顯示

    呵呵,是不是多少有點暈倒的感覺 ? 正常的 32×32 和 16×16 大小竟然在 EXESCOPE 和 BC++ 中顯示錯誤,而且顏色也不正確;毫無疑問,VC 在保存中文化檔案時破壞了游標資源的標識頭,而造成其它中文化工具讀取時顯示錯誤及執行程式時的難看界面,解決的辦法當然是修正標識頭或匯入正確的游標資源了。
    我們仍然用 BC++ 開啟原版和中文化版檔案,以純文字方式分別查看此處的資源,即右鍵點擊 cursor 資源 30980 項目,執行「Edit as Text」,請注意前面幾行:

30980 CURSOR
{
'00 00 02 00 02 00 20 20 00 00 0F 00 0F 00 30 01'
'00 00 26 00 00 00 10 10 00 00 08 00 08 00 B0 00'
......

30980 CURSOR
{
'00 00 02 00 02 00 28 20 00 00 0F 00 0F 00 30 01'
'00 00 26 00 00 00 28 10 00 00 08 00 08 00 B0 00'
......

原版 cursor 資源 30980 的純文字顯示

VC 中文化版 cursor 資源 30980 的純文字顯示

    紅色字串是中文化前後不同的內容,記錄的應該是游標的大小,20、10 都是 16 進制方式,分別為 10 進制的 32、16,但 4136 和 2088 是怎麼出來的我也搞不懂了,嘗試修改一下保存再雙擊 cursor 資源 30980 項目,您會發現現在一切都正常了;而且奇怪的是這時您即使再將 20、10 修改回 28、28,資源方式查看也是正常的。似乎一切進展順利,我們嘗試從第一個游標逐一修改,到 30983 時終於出現問題: 修改後您會發現在右欄中的顯示區域為 16 進制字串,而不是正常的資源方式;那麼剪切掉這個資源從原版再複製一個如何呢 ? 您會發現本應是 32×32 和 16×16 的兩個游標只剩一個了,而另一個竟然是 0×0 大小,真衰呀 :o(
    從我做的中文化來看,似乎 30977 之後都是標準的 VC 游標資源,而且 30983 之後普遍存在 BC++ 修改錯誤的問題,那麼我們先用 BC++ 解決前面的游標而用其它手段搞定後面的您,在 BC++ 下修改儲存退出,程式竟然無法正常執行,用老方法使用 PEBBLE32 開啟重新儲存依然無法正常執行 !
    我們再嘗試備份 VC 中文化的檔案,然後將原版和中文化版同時在 PEBBLE32 內開啟,刪除掉所有原版的對話框、選單和字串表資源,將 VC 中文化版中相應的資源複製到原版中(字串表資源的一次刪除和複製剪貼操作項目不能太多,否則出錯),儲存退出後嘗試執行,程式仍然無法正常啟動。
    我們還可以嘗試在 BC++ 下將 cursor 資源 30983 前面的部分手動修改後另存為 RES 或 RC 格式,用資源替換工具匯入原版,哈哈,會發生什麼情況呢 ? 由於中文化版資源與原版語系不同,所有資源竟然遺失而檔案只剩下區區 8K。
    那麼真的沒有辦法解決這僅剩的一點點游標問題嗎 ? Ronnier 在中文化 bleem 時給了我們很好的提示,我也認為 reshacker 是個非常不容易出錯的解決之道,但操作不免有些不方便,以下是我全部的測試過程:
    1 我們不妨假設要中文化 test.exe 這個檔案,VC 中文化後的檔案命名為 test-vc.exe,需注意的是最好不要修改 cursor 資源的語系,沒有必要呀;
    2 用 BC++ 開啟 test-vc.exe 另存為 test.res,因為我個人認為 RES 格式是相容性最好的,VC、BC 以及 reshacker 都可以支援;
    3 用 BC++ 開啟 test.res,用純文字方式修改 cursor 資源 30983 前面的部分,需要注意的是,如果資源只有一個 32×32 的游標則只需要修改上表中第一行的 28 即可,包含兩個游標則最好兩行都改(測試只修改第一個好像也可以 :-),儲存退出;
    4 用 reshacker 開啟 test-vc.exe 這個檔案(保險起見先備份一下),因為不存在語系不同的問題,我們可以使用 Update all Resources 功能將 test.res 的資源全部替換進來,另存為 test-temp.exe 看看執行是否正常,很奇怪的一個現象是替換所有資源後程式執行是沒有問題的,但很多地方游標無法顯示;
    5 我們用 BC++ 開啟 test-temp.exe 就會發現手動調整的游標資源全部遺失而且開啟會出錯,這可真不是好事。重新開啟 test.res,刪除 cursor 資源 30983 前面的部分,再開啟 test.exe 檔案,將相應的游標逐一複製剪貼過來(很麻煩,不像 VC 可以批次複製),再儲存重複上一操作執行測試,呵呵…………。
    6 程式執行正常但經過調整後的游標依然很大,同時游標資源顯示錯位,拖動面板分隔欄時顯示錯誤的游標,我們用 BC++ 對比查看時就會發現,test.res 中的資源是正常的,而替換所有資源後的 test-temp.exe 中游標資源從 30979 到 30802 呈循環顯示錯誤;看來 reshacker 也存在編譯檔案的錯誤;
    7 透過以上這麼多的方式和測試,我能得到的結論就是標準 VC 游標資源是不能輕易動的,也就是從 30977 之後的部分最好不要用 BC++ 來編輯,而 reshacker 的全部替換功能也是不安全操作,所以我們只有老老實實的逐一替換您: 我們再用 reshacker 開啟上步的 test-temp.exe,容易讓人迷惑的是游標清單項是從 1 向下順延的,而不是我們在其它工具中見到的 5 位序列,不要管它,直接使用 Replace Cursor 功能,在選擇檔案時開啟 test.exe 這個原始檔案(當初不修改 cursor 資源的語系的原因即在此),這時候您就會看到在兩個游標清單欄中都是序號相同的資源了 :-)
     呵呵,還等什麼 ? 從 30977 開始您,一般情況下到 30988 為止有 12 個游標需要替換,一次只能替換一個,全部替換完畢後另存一個名字您,這個檔案就是您最終的中文化產物了 ! 如果您仍然覺得不安全的話,那麼從第 1步後直接跳到第7步操作,把 test-vc.exe 中的所有游標逐一替換一遍您,眼別花了 :-)
    羅索了這麼多,您會發現前面說的都是廢話,而最後的1、7才真正有價值,而可能可以偷懶的地方就是 30977 前面的部分使用純文字方式編輯存為 RES 格式;其實也不全是如此,不同的應用程式如果 BC++ 和 PEBLLE32 及資源替換工具能解決問題的化要比 reshacker 省事,我建議您可以先用前面的方法測試再說,以後作中文化升級時心中自然有數了。游標解決的辦法並不複雜,但由於游標檔案的格式與游標資源在 32 位程式中的排列格式並不相同,所以我暫時沒有辦法直接透過十六進制編輯 VC 中文化檔案來完成,如果您有什麼心得,不妨告訴我∼∼

    相關中文化工具: VC++ 6.0、BC++ 5.02 簡版、EXESCOPE 6.0、PEBBLE32 3.1、RESHACKER 2.5.0.1 等
    所有中文化工具及涉及文章可在漢化新世紀得到。
    ChinEase 補充於 2000-10-02

 



回教學