Delphi. net 與unicode的問題 |
|
mybank98
一般會員 ![]() ![]() 發表:4 回覆:14 積分:3 註冊:2006-09-28 發送簡訊給我 |
各位先進您們好:
請教幾個問題 我目前是用Delphi 6來開發程式,聽說Delphi.net可以支援unicode是真的嗎? 兩種的語法會差很多嗎 原本我的程式要升級為Delphi.net會很難嗎? 我下載了Turbo Delphi.net 試用版,我要如何開發單機版的軟體,只要告訴我如何開啟即可,我試不出來 如果要想要有參考的資料,要去那裏找,或者買誰的書。 我用過中文補完計劃、但面對我的單位數千人,要逐一安裝很難,因此目前正在學JAVA, 如果Delphi.net可以解決UNICODE的問題,那對我的衝擊比較小。
------
Delphi程式設計工作室 網址:http://www.myhome.url.tw/ Mail:mybanksoft@gmail.com |
Coffee
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
有一點痛的Unicode升級法 TntWare
在Source底下你可以找到Tnt*.pas來支援原先的SysUtils, Classes,比如說TntSysUtils, TntClasses 它可以支援,但並不是完全取代掉原本的功能 比如說TApplication有TTntApplication對應,但是實際上去產生TntForm的application仍然是使用Application 因為TntApplication只是一個help來wrap需要Widestring support的class 然後為了因應支援Delphi .net以上的版本有WideStirng routines,所以某些函式不會以Wide開頭或W結尾這種方式命名(為避免衝突) 會以Tnt_開頭,在TntWideStrUtils底下尤其多.. 某些property為避免衝突會加上W結尾,如TEdit的PasswordChar會變成TntEdit的PasswordCharW,所以可能會需要自己手動修改 dfm檔 至於它的Converter我試過了,並不是很好用,還是自己轉比較放 心一點
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
mybank98
一般會員 ![]() ![]() 發表:4 回覆:14 積分:3 註冊:2006-09-28 發送簡訊給我 |
===================引 用 文 章=================== 有一點痛的Unicode升級法? TntWare 在Source底下你可以找到Tnt*.pas來支援原先的SysUtils, Classes,比如說TntSysUtils, TntClasses 它可以支援,但並不是完全取代掉原本的功能 比如說TApplication有TTntApplication對應,但是實際上去產生TntForm的application仍然是使用Application 因為TntApplication只是一個help來wrap需要Widestring support的class 然後為了因應支援Delphi .net以上的版本有WideStirng routines,所以某些函式不會以Wide開頭或W結尾這種方式命名(為避免衝突) 會以Tnt_開頭,在TntWideStrUtils底下尤其多.. ?某些property為避免衝突會加上W結尾,如TEdit的PasswordChar會變成TntEdit的PasswordCharW,所以可能會需要自己手動修改 dfm檔 至於它的Converter我試過了,並不是很好用,還是自己轉比較放 心一點 Tntware可以將unicode存入至資utf-8的資料庫嗎?上次我試了Firebird 2.0好像存不進去,我試一下mysql好了,至少我用java是可以存入與讀出的。 如果可以用TntWare我更省事,對了,程式碼要更改嗎,或是只要換元件及元件的名稱(取代舊檔)即可,有操作說明可以參考嗎? 分發的時候除了原本的之外,使用TntWare需要多附那一些檔案(dll)給客戶
------
Delphi程式設計工作室 網址:http://www.myhome.url.tw/ Mail:mybanksoft@gmail.com |
Coffee
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
1. 可以,Delphi原本的ADO元件似乎不完全使用OleString(WideString),所以在TntWare的LX Control 有implement一些dataset,這些元件我比較不清楚
2.程式碼是一定要改,除了我原本提到的那些以外,再來你要自己注意所有的String最好都能改成WideString,所有PChar改成PWideChar,不要把SizeOf當成index操作,請改用Length,所有涉及字串字元運算請改用Wide版或者是Tnt附的字串處理函式,不然就是借用TntWare來重寫自己需要的函式,請注意所有的Event最好能夠是Widestring operation,也請注意所有額外使用的WinAPI請改成Unicode版本(通常是原本的函式加上W結尾,但是傳入的結構應該會不同,請注意這點,有問題可以直接查Delphi附的SDK Reference或者是TntWare的Source Code),操作說明沒有,因為TntWare的用法基本上就跟Delphi原生的元件與函式幾乎一樣,多試個幾次就有答案了,或者是直接翻TntWare的Source Code(我幾乎都是翻Source查額外的function跟用法) 3.不需要 4.請注意,AnsiString與WideString是不能直接互轉的,所以請不要直接typecast它們 5.Win9x本來就無法支援Unicode,所以就...
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
mybank98
一般會員 ![]() ![]() 發表:4 回覆:14 積分:3 註冊:2006-09-28 發送簡訊給我 |
|
Coffee
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
我自己轉過,扣除xml跟html template約9000行的程式,只是沒有DB跟Report,但DB部份我有單獨用過,所以確定可行。
雖然有點痛,但是沒想像中的難搞,我覺得這樣可以學不少東西。 如果你覺得程式可以重寫沒問題,那麼何不考慮用TntWare重寫?TntWare包括了Delphi多數的Std, Ext Control,LX有更多的DB Controls,所以在介面的部份我想沒有什麼太大的問題,除非你有已慣用的lib(但也得確定.net上會有,也要確保這組lib是已經 unicode ready..:p),我不能保證.net會不會比較快,因為我並沒有很正式的拿.net來作過什麼,基本的語法是沒差多少,但考慮到vcl是跟 win32不一樣的,所以我不敢說是不是能很快的上手。 如果你想轉的話,因為我不知道你的程式規模,但可以建議你可以朝著這樣的方向走: 先用TntForm來測試你自己寫的函式(並非你hard code在event裡面的,而是那些自訂的工具函式或類別),把它們都改成WideString, 這樣你仍然可以保持原本的程式幾乎可以work,因為WideString與AnsiString在互轉會lost幾乎都是非locale語言的問題 再來測試你的3Party 元件是不是能夠支援WideString, 如果不行,那麼先嘗試著去改source,看看能不能花點時間完成,如果仍然不行,就找看看有沒有Unicode support同樣功能的元件 最後再來改Delphi Std Control(TForm, TButton...etc),直接去修改dfm跟pas檔讓他們變成Tnt的元件,並為他們加上需要的unit。 然後開啟project會發現有讀不到或讀錯的property,請另外建一個project放入同樣的元件並觀察他們的property name在dfm檔中是長什麼樣再依樣 變回去就可以。 還有TntWare本身也support往後Delphi的版本(有沒有到Turbo我就不清楚了..但200x的部份都有)
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
mybank98
一般會員 ![]() ![]() 發表:4 回覆:14 積分:3 註冊:2006-09-28 發送簡訊給我 |
|
mybank98
一般會員 ![]() ![]() 發表:4 回覆:14 積分:3 註冊:2006-09-28 發送簡訊給我 |
------
Delphi程式設計工作室 網址:http://www.myhome.url.tw/ Mail:mybanksoft@gmail.com |
Coffee
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
這幾天剛好因為需要裝了mySQL 5.0..順便拿了ADO跟TntWare測了一下,基本的operation是沒有問題的,
如果你需要binary sample我可以丟一份給你 Unicode補完,以前作過的案子是因為剛好客戶要求要Web, 所以我們把相關的元件pack在一起作成類似Install Shied一樣讓User自行安裝或者是我們再到User那安裝 不過數千人的規模確實是不好控制 //據說Vista的正黑體缺字缺很兇XD 再來就是Delphi下一版會不會支援Unicode,我想答案還是一樣的,Delphi本身可以處理Unicode, 但問題就在於VCL本身幾乎都是使用PChar、AnsiString在操作,在API的使用上也幾乎都是使用PChar 要Borland去作這樣的動作似乎有點困難,因為Borland已經把這樣的solution push到.net上//當然你我都認為不夠
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |