針對 utf8 中文字輸入問題,改得差不多了!!
這版是拿 fwh 19.09 來修改的,其他版本是否適用不知道...
目前只針對 utf8 輸入做修改,所以,沒有在 ansi/big5 之間著墨太多,甚至也沒什麼測試.
這次花錢買這套就是要拿來改支援 utf8 問題,其他的先擱置不處理!
原始的 tget.prg 在輸入 utf8 中文字上會有些問題,非得要整列都指定為 WIDE 才行,
這次也支援了 '@!'、'@S' ,上的修改...
原則上是只要在主程式的 init proc... 加上 fw_setUnicode(.t.) 就可以,全部舊有程式的 tget 都不用做任何修改.
(至少我自己一套完整系統幾十萬行程式碼都沒異動就可以跑,只是其他些許畫面要微調而已...)
測試了:VK_LEFT、VK_RIGHT、VK_INSERT(include Overwrite)、VK_DELETE、VK_BACK、VK_SHIFT+Select+Delete...
這些都沒問題了!
只提供 for bcc70 tget.obj, 其他 compiler 沒提供,因為我沒在使用.
為何不提供 tget.prg ??? 因為網路上沒道德的人太多,沒必要這麼好心!
*2020.05.19: 使用鍵盤: shift+往右方向鍵、shift+往左方向鍵、標示下做刪除、隨時保持字串固定長度,不會因為新增、刪除而縮短或增加字串長度、VK_BACK、VK_DELETE、VK_INSERT、VK_RIGHTVK_LEFT 都能正常運作了!
TGet modify for utf8 input(Lastday: 2021.09.23)
TGet modify for utf8 input(Lastday: 2021.09.23)
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw
Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)
*2020.07.17: 從 fivewin forum 上面得知,目前 tget 有三種模式:
當 FW_SetUnicode(.T.) 時,就有上述三種方式可以設定,這三種模式分別為:
1. CHRGROUP CHR_ANSI -> 這種方式跟以前 ANSI 方式一樣沒改變,接受各種 Picture 設定,
而且由 fwh/harbour 的 pciture 掌控處理.
2. CHRGROUP CHR_ANY、CHRGROUP CHR_WIDE -> 這兩種模式的處理方式交由 Windows Edit 控制,
僅允許 picture '@!',其他模式都不被接受.
3. CHR_ANY -> 預設值為此,如果這個字串長度為 12,則可以輸入 12 個 ansi 字元或是 4 個 utf8 字串.
ps. 這有點奇怪,12 個 ansi 不一定等於 4 個 utf8,難怪他們的 tget 使用起來怪怪的.
4. CHRGROUP CHR_WIDE -> 在這個模式下,若初始化只有 4 個 'ABCD' 字串,那只能輸入 4 個 unicode 字串
長度為 12 bytes (使用 len() 偵測).
這個也很奇怪,他說的是 unicode 而不是 utf8 ??? 反正我修改的 tget 也不管這些,只要能正確輸入 utf8 就好了!
以上是 fwh forum 說法,但是第二、第三種情況怪怪的!
怎麼說,如果舊有程式碼想要只用工具程式將 big5 編碼轉為 utf8 編碼然,後加上 fw_setUnicode(.t.) 下不做任何修改的話,
預設是跑 [CHRGROUP CHR_ANY] 這種模式,但是很奇怪的,如果初始化字串長度 40,
如果是 "ABC....." 後面補足四十個空白,測試時你會發現,游標移至 'C' 之後,無法移動過去??????
但是輸入資料又可以????
你用鍵盤 shift 搭配向右箭頭按鍵,想要從右邊向左選擇,你會發現無法使用?????
總之,很多很多的問題.....
還好,針對這些問題,我老早就修改好 tget.prg,讓舊的程式碼只要做 ansi -> utf8 格式轉換,
再加上 fw_setUnicode(.t.) 就可以正常執行了!
但,真的這樣就能轉至 utf8 輸入任何資料了嗎???? 答案當然是否定的!
其他原因還有字型問題、低階 .c 的轉換、之前用的 filexls 快速輸出 excel 檔案...
filexls 只支援 excel 2003 之前的格式,完全不支援 .xlsx,所以也趁此機會找了 libxl 來替代,
相關呼叫函數也都寫成 class,使用上和原先的 tExcel 類似,也跟 ole32 類似,總算解決了 excel.
至於低階問題,fwh 的 cGetDir 也有問題,無法顯示 utf8 字串、無法開啟初始化目錄,這個我個人也解決了!
另外一些 winAPI 也有些需做修改,函數太多就不詳列.
還有一個重點,tmysql.prg ,原始 harbour 裡面的 那支 class 也有問題,並沒有針對 utf8 做修正,
如果沒修改,抓回來的資料、欄位定義都走位,雖然還是可以從 mysql 讀到 utf8 資料,
但是,很多地方都無法應用!
代碼: 選擇全部
1) @ r,c GET .... CHRGROUP CHR_ANSI
2) @ r,c GET .... CHRGROUP CHR_ANY // This is default if CHRGROUP clause is not used.
3) @ r,c GET .... CHRGROUP CHR_WIDE
1. CHRGROUP CHR_ANSI -> 這種方式跟以前 ANSI 方式一樣沒改變,接受各種 Picture 設定,
而且由 fwh/harbour 的 pciture 掌控處理.
2. CHRGROUP CHR_ANY、CHRGROUP CHR_WIDE -> 這兩種模式的處理方式交由 Windows Edit 控制,
僅允許 picture '@!',其他模式都不被接受.
3. CHR_ANY -> 預設值為此,如果這個字串長度為 12,則可以輸入 12 個 ansi 字元或是 4 個 utf8 字串.
ps. 這有點奇怪,12 個 ansi 不一定等於 4 個 utf8,難怪他們的 tget 使用起來怪怪的.
4. CHRGROUP CHR_WIDE -> 在這個模式下,若初始化只有 4 個 'ABCD' 字串,那只能輸入 4 個 unicode 字串
長度為 12 bytes (使用 len() 偵測).
這個也很奇怪,他說的是 unicode 而不是 utf8 ??? 反正我修改的 tget 也不管這些,只要能正確輸入 utf8 就好了!
以上是 fwh forum 說法,但是第二、第三種情況怪怪的!
怎麼說,如果舊有程式碼想要只用工具程式將 big5 編碼轉為 utf8 編碼然,後加上 fw_setUnicode(.t.) 下不做任何修改的話,
預設是跑 [CHRGROUP CHR_ANY] 這種模式,但是很奇怪的,如果初始化字串長度 40,
如果是 "ABC....." 後面補足四十個空白,測試時你會發現,游標移至 'C' 之後,無法移動過去??????
但是輸入資料又可以????
你用鍵盤 shift 搭配向右箭頭按鍵,想要從右邊向左選擇,你會發現無法使用?????
總之,很多很多的問題.....
還好,針對這些問題,我老早就修改好 tget.prg,讓舊的程式碼只要做 ansi -> utf8 格式轉換,
再加上 fw_setUnicode(.t.) 就可以正常執行了!
但,真的這樣就能轉至 utf8 輸入任何資料了嗎???? 答案當然是否定的!
其他原因還有字型問題、低階 .c 的轉換、之前用的 filexls 快速輸出 excel 檔案...
filexls 只支援 excel 2003 之前的格式,完全不支援 .xlsx,所以也趁此機會找了 libxl 來替代,
相關呼叫函數也都寫成 class,使用上和原先的 tExcel 類似,也跟 ole32 類似,總算解決了 excel.
至於低階問題,fwh 的 cGetDir 也有問題,無法顯示 utf8 字串、無法開啟初始化目錄,這個我個人也解決了!
另外一些 winAPI 也有些需做修改,函數太多就不詳列.
還有一個重點,tmysql.prg ,原始 harbour 裡面的 那支 class 也有問題,並沒有針對 utf8 做修正,
如果沒修改,抓回來的資料、欄位定義都走位,雖然還是可以從 mysql 讀到 utf8 資料,
但是,很多地方都無法應用!
- 附加檔案
-
- tget.for.fwh20.xx.7z
- tget object for fwh20.xx (compiler for bcc7)
- (21.41 KiB) 已下載 1952 次
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw
Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)
2020.09.02: 修改: ::HandleEvent() -> case nMsg == WM_PASTE
之前版本沒有改到這個,造成滑鼠右鍵、貼上沒有作用問題修正
fix right key paste of mouse
之前版本沒有改到這個,造成滑鼠右鍵、貼上沒有作用問題修正
fix right key paste of mouse
- 附加檔案
-
- tget-2020.09.02.7z
- tget for utf8 of fwh 20.xx
- (33.25 KiB) 已下載 1961 次
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw
Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)
今天看到 fivewin forum 有人提到 TGet 輸入空白有問題...
參考連結: https://forums.fivetechsupport.com/view ... abd69199cf
嘿咩!! 我就說咩! 原版的 tget 遇到 unicode + string 型態,就沒轍了!
試試我改的 tget 吧! 保證可以移動空白鍵的!!
範例碼:
參考連結: https://forums.fivetechsupport.com/view ... abd69199cf
嘿咩!! 我就說咩! 原版的 tget 遇到 unicode + string 型態,就沒轍了!
試試我改的 tget 吧! 保證可以移動空白鍵的!!
範例碼:
代碼: 選擇全部
#include "fivewin.ch"
function Main()
local oDlg
local oCode, oDesc, cCode := space(10), cDesc := space(100)
FW_SetUnicode( .T. ) // <----- problem here
// if .F., the space key is running normally
DEFINE DIALOG oDlg size 400, 200 pixel title "test read" ;
STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_THICKFRAME ) ;
COLOR CLR_WHITE, CLR_CYAN
@ 10, 5 SAY "CODE:" OF oDlg size 30, 12 pixel transparent
@ 25, 5 SAY "DESC:" OF oDlg size 30, 12 pixel transparent
@ 10,35 get oCode var cCode of oDlg size 70, 12 pixel
@ 25,35 get oDesc var cDesc of oDlg size 100, 12 pixel
@ 60,40 BUTTON "OK" SIZE 50,12 PIXEL OF oDlg
ACTIVATE DIALOG oDlg CENTERED
return nil
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw
Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)
*2020.09.10: a.修改使用鍵盤按下 Ctrl+V 貼兩次問題,滑鼠右鍵貼上無此問題.
b.修正 picture '@!' 時,使用 Ctrl+V 無法完整貼上資料問題.
*2020.09.10: a. fix: use Ctrl+V is paste double data.
b. fix: use Ctrl+V can't paste full data when picture is '@!'.
b.修正 picture '@!' 時,使用 Ctrl+V 無法完整貼上資料問題.
*2020.09.10: a. fix: use Ctrl+V is paste double data.
b. fix: use Ctrl+V can't paste full data when picture is '@!'.
- 附加檔案
-
- tget-2020.09.10.7z
- tget for fwh 20.xx fix (utf8)
- (28.51 KiB) 已下載 1946 次
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw
Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)
*2020.12.09: 修正:如果該欄位輸入資料與預設資料長度相同時,例如: cStr=Space(4) 而輸入資料為 '1234'`,之前的功能可以輸入任何資料覆蓋游標所在位置的資料,但是原版的無法覆蓋,需要先刪除資料後才能輸入,這次版本修正這個問題.
- 附加檔案
-
- tget-2020.12.09.7z
- (28.57 KiB) 已下載 1906 次
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw
Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)
*2021.06.20: a.修正 PICTURE '@R', '@!', '@K' 等輸入功能,使用滑鼠貼上時資料不正確、位置不正確問題.
b.加入剪貼簿貼上時,插入/覆寫 模式處理方式.
c.修正 Ctrl+V 貼上後游標位置不正確問題.
b.加入剪貼簿貼上時,插入/覆寫 模式處理方式.
c.修正 Ctrl+V 貼上後游標位置不正確問題.
- 附加檔案
-
- tget-2021.06.20.7z
- tget for bcc74 only c source code.
- (28.54 KiB) 已下載 2842 次
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw
Re: TGet modify for utf8 input(Lastday: 2021.09.23)
*2021.09.23: fix
download: https://app.box.com/s/wkmtq26ee03kplkd412f5d5y1wumw15f
代碼: 選擇全部
修改(fix): ::KeyWChar()
1. 修正: 插入狀態下,當資料已滿狀態下無法繼續輸入資料自動移除尾端文字功能.
In the inserting state, when the data is full, you cannot continue to enter the data and automatically remove the trailing text function.
修改(fix): ::HandleEvent
1. 修正: 當 ::cPicture 為 '@R' 格式時,貼上資料會亂掉問題, ex: '@R 999.99.99' 貼上日期 '110.09.22' 會亂掉.
When ::cPicture is in the format of '@R', the data will be messed up when pasting, ex: '@R 999.99.99' and the date '110.09.22' will be messed up when pasting the date.
修改(fix): ::DispText()
1. 修正: 密碼欄位剛進入時不要顯示 '*' 符號.
Don't display the '*' symbol when entering the password field.
2. 修正: 密碼欄位往回刪除所有字元時,又會跑出密碼欄位長度的 '*' 符號出來!
When deleting all characters in the password field, the '*' symbol of the length of the password field will come out again!
line ID: ssbbstw
WeChat ID: ssbbstw
WeChat ID: ssbbstw