1 頁 (共 1 頁)

TGet modify for utf8 input(Lastday: 2021.09.23)

發表於 : 2019-12-23, 10:02
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 都能正常運作了!

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

發表於 : 2020-07-17, 17:33
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 資料,
但是,很多地方都無法應用!

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

發表於 : 2020-09-02, 16:37
admin
2020.09.02: 修改: ::HandleEvent() -> case nMsg == WM_PASTE
之前版本沒有改到這個,造成滑鼠右鍵、貼上沒有作用問題修正
fix right key paste of mouse
圖檔

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

發表於 : 2020-09-03, 22:41
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
 
圖檔

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

發表於 : 2020-09-10, 00:25
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 '@!'.

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

發表於 : 2021-01-08, 09:57
admin
*2020.12.09: 修正:如果該欄位輸入資料與預設資料長度相同時,例如: cStr=Space(4) 而輸入資料為 '1234'`,之前的功能可以輸入任何資料覆蓋游標所在位置的資料,但是原版的無法覆蓋,需要先刪除資料後才能輸入,這次版本修正這個問題.

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

發表於 : 2021-06-20, 11:15
admin
*2021.06.20: a.修正 PICTURE '@R', '@!', '@K' 等輸入功能,使用滑鼠貼上時資料不正確、位置不正確問題.
b.加入剪貼簿貼上時,插入/覆寫 模式處理方式.
c.修正 Ctrl+V 貼上後游標位置不正確問題.

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

發表於 : 2021-09-23, 23:44
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