TGet modify for utf8 input(Lastday: 2021.09.23)

xBase/clipper
回覆文章
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

TGet modify for utf8 input(Lastday: 2021.09.23)

文章 admin »

針對 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 都能正常運作了!
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)

文章 admin »

*2020.07.17: 從 fivewin forum 上面得知,目前 tget 有三種模式:

代碼: 選擇全部

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
當 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 資料,
但是,很多地方都無法應用!
附加檔案
tget.for.fwh20.xx.7z
tget object for fwh20.xx (compiler for bcc7)
(21.41 KiB) 已下載 740 次
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)

文章 admin »

2020.09.02: 修改: ::HandleEvent() -> case nMsg == WM_PASTE
之前版本沒有改到這個,造成滑鼠右鍵、貼上沒有作用問題修正
fix right key paste of mouse
圖檔
附加檔案
tget-2020.09.02.7z
tget for utf8 of fwh 20.xx
(33.25 KiB) 已下載 723 次
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)

文章 admin »

今天看到 fivewin forum 有人提到 TGet 輸入空白有問題...
參考連結: https://forums.fivetechsupport.com/view ... abd69199cf

嘿咩!! 我就說咩! 原版的 tget 遇到 unicode + string 型態,就沒轍了!
試試我改的 tget 吧! 保證可以移動空白鍵的!! :lol: :lol: :lol:

範例碼:

代碼: 選擇全部

    #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
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)

文章 admin »

*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 '@!'.
附加檔案
tget-2020.09.10.7z
tget for fwh 20.xx fix (utf8)
(28.51 KiB) 已下載 705 次
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)

文章 admin »

*2020.12.09: 修正:如果該欄位輸入資料與預設資料長度相同時,例如: cStr=Space(4) 而輸入資料為 '1234'`,之前的功能可以輸入任何資料覆蓋游標所在位置的資料,但是原版的無法覆蓋,需要先刪除資料後才能輸入,這次版本修正這個問題.
附加檔案
tget-2020.12.09.7z
(28.57 KiB) 已下載 641 次
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

Re: FWH 19.09: TGet modify for utf8 input (upgrade to 20.04)

文章 admin »

*2021.06.20: a.修正 PICTURE '@R', '@!', '@K' 等輸入功能,使用滑鼠貼上時資料不正確、位置不正確問題.
b.加入剪貼簿貼上時,插入/覆寫 模式處理方式.
c.修正 Ctrl+V 貼上後游標位置不正確問題.
附加檔案
tget-2021.06.20.7z
tget for bcc74 only c source code.
(28.54 KiB) 已下載 591 次
line ID: ssbbstw
WeChat ID: ssbbstw
admin
Site Admin
文章: 50
註冊時間: 2014-09-23, 10:58

Re: TGet modify for utf8 input(Lastday: 2021.09.23)

文章 admin »

*2021.09.23: fix

代碼: 選擇全部

修改(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!
download: https://app.box.com/s/wkmtq26ee03kplkd412f5d5y1wumw15f
line ID: ssbbstw
WeChat ID: ssbbstw
回覆文章