線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2293
推到 Plurk!
推到 Facebook!

Delphi. net 與unicode的問題

 
mybank98
一般會員


發表:4
回覆:14
積分:3
註冊:2006-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-13 13:07:42 IP:211.79.xxx.xxx 未訂閱
各位先進您們好:
請教幾個問題
我目前是用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-13 13:30:46 IP:220.130.xxx.xxx 未訂閱
有一點痛的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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-13 14:53:29 IP:210.69.xxx.xxx 未訂閱

===================引 用 文 章===================
有一點痛的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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-13 15:04:28 IP:220.228.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-13 15:46:56 IP:210.69.xxx.xxx 未訂閱
  1. 看到您的回覆我有一點害怕,這樣的工程可能很大,大到我可以把jsp學完了,因為要伺服器,難以開發個人、單機的軟體。
  2. 如果回到起點用delphi.net會比較快速嗎?程式重寫是沒關系,只要語法不要差太多即可,以後.net應該是MS的主流,若是這樣的話我的資源(時間、客戶的等待)比較不會浪費。
------
Delphi程式設計工作室
網址:http://www.myhome.url.tw/
Mail:mybanksoft@gmail.com
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-12-13 16:29:35 IP:220.228.xxx.xxx 未訂閱
我自己轉過,扣除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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-12-13 23:07:09 IP:59.125.xxx.xxx 未訂閱
我明天去書局找書好了,看看Delphi.net如何開發單機版的軟體,以及如何使用unicode的問題,希望有解。

------
Delphi程式設計工作室
網址:http://www.myhome.url.tw/
Mail:mybanksoft@gmail.com
mybank98
一般會員


發表:4
回覆:14
積分:3
註冊:2006-09-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-12-14 22:11:10 IP:59.125.xxx.xxx 未訂閱
  1. 由於很忙所以我沒有去書局。
  2. 我重新到寶蘭的網站下載註冊碼,才發現原來註冊碼Delphi與Delphi.net是不同的,分別是reg736.txt,與reg738.txt.
  3. 我用vcl.net開發時發現不支援 winsock,因此.NET另有函數支援,不過光看說明我試不來。
  4. dbexpress 目前只支援MSSQL使用unicode(看李維的說明),而我用MySQL,則是下載DBX for MySQL網址http://www.microolap.com,不過要花錢買。
  5. 資料庫我是用MySQL 5.0.27版,工具是用mysql-query-browser-1.1.20-win.msi,這個版本在JSP,也可以使用UNICODE
  6. 我終於看的到「堃」字了。心中很感動。
  7. 據說ado的也可以用unicode,但我沒有試。
  8. 如果Delphi下一版能直接支援unicode而且是for inerbase/firebird,我可能會再回來用Delphi,畢竟將別人的名子打錯是不對的。畢竟像我們單位有裝.net的電腦不多。
------
Delphi程式設計工作室
網址:http://www.myhome.url.tw/
Mail:mybanksoft@gmail.com
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-12-14 22:41:38 IP:220.228.xxx.xxx 未訂閱
這幾天剛好因為需要裝了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上//當然你我都認為不夠
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
系統時間:2024-05-20 0:39:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!