全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3269
推到 Plurk!
推到 Facebook!

OnGetText如何顯示unicode?

缺席
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-06 21:24:01 IP:218.160.xxx.xxx 訂閱
使用tntware元件,顯示unicode資料,但是當使用TField.OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);時
確將資料變為?號.
請問要如何將OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);變更為OnGetText(Sender: TField; var Text: wideString; DisplayText: Boolean);?

Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-06 21:38:58 IP:211.22.xxx.xxx 未訂閱
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-07 13:34:53 IP:218.166.xxx.xxx 訂閱
上述方法無法解決問題!謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-07 18:37:55 IP:211.22.xxx.xxx 未訂閱
不要吝嗇把你的「問題」程式碼部分貼出來~
只是猜測你的狀況提出解決方案而已。
===================引 用 t27 文 章===================
上述方法無法解決問題!謝謝
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-07 19:17:38 IP:125.232.xxx.xxx 訂閱
private
procedure GetText(Sender: TField; var Text: String; DisplayText: Boolean);
.
.
.
implementation
{$R *.DFM}
procedure TFrmZSC_1.GetText(Sender: TField; var Text: String; DisplayText: Boolean);
var
v:variant;

begin
v := G41Src.DataSet.Lookup('SEQ',PADR(Sender.AsString,Sender.DataSize-1,' '),'PRG_NAME');
if v <> Null then
Text := Sender.AsString ' ' Trim(v)
else
Text := Sender.AsString;

end;
.
.
.
procedure TFrmZSC_1.FormCreate(Sender: TObject);
begin
.
.
(TntDBGrid1.Columns[0].Field).OnGetText := GetText;
end;

以上是程式片段,目的是將代碼轉換顯示代碼中文名稱
使用mysql資料庫,字集為UTF8-unicode.
想將var Text: String宣告變為va Text: widestring,但是compile rerror.
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-07 19:56:56 IP:211.22.xxx.xxx 未訂閱
我寫過WIDESTRING資料庫存取的問題,我覺得問題不在這裡~
(1)Delphi的VCL元件是不支援UNICODE的!所以你取得的資料不管怎麼轉!他都SHOW不出來!改用一些支援UNICODE的DELPHI元件即可如TNTUnicodeControl(現在稱為TMS好像要錢了,用舊版的即可)。
(2)從資料庫存取資料的資料庫方法與元件也要支援UNICODE,如Query之類的物件等等,當然TNT也有支援,快去網路上找找舊版的來用。
===================引 用 t27 文 章===================
private
procedure GetText(Sender: TField; var Text: String; DisplayText: Boolean);
.
.
.
implementation
{$R *.DFM}
procedure TFrmZSC_1.GetText(Sender: TField; var Text: String; DisplayText: Boolean);
var
v:variant;

begin
v := G41Src.DataSet.Lookup('SEQ',PADR(Sender.AsString,Sender.DataSize-1,' '),'PRG_NAME');
if v <> Null then
Text :=Sender.AsString ' ' Trim(v)
else
Text := Sender.AsString;

end;
.
.
.
procedure TFrmZSC_1.FormCreate(Sender: TObject);
begin
.
.
(TntDBGrid1.Columns[0].Field).OnGetText := GetText;
end;

以上是程式片段,目的是將代碼轉換顯示代碼中文名稱
使用mysql資料庫,字集為UTF8-unicode.
想將var Text: String宣告變為va Text: widestring,但是compile rerror.
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-07 22:00:22 IP:61.31.xxx.xxx 訂閱
據說引用TntDB並且在DFM 將 TStringField 改成 TTntStringField 這樣就會取得 AsWideString 的屬性。

參考
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-07 22:03:32 IP:61.31.xxx.xxx 訂閱
當然 onGetText  當然就會被導向至正確的宣告。
必要的事,要將舊的onGetText 移除。這樣才會產生新的。

內容查閱 TntDB。

道聽塗說,無須當真。.....
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-06-07 23:21:43 IP:125.232.xxx.xxx 訂閱
unit ZSC_1;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
StdCtrls, Forms, DBCtrls, DB, DBGrids, Grids, ExtCtrls,
Buttons, ComCtrls, DBTables, Mask, Dialogs, DBClient,
TntForms, TntComCtrls, TntDBGrids, TntButtons, TntExtCtrls, TntDBCtrls,
TntDB, TntStdCtrls;

type
TFrmZSC_1 = class(TTntForm)
TntDBGrid1: TTntDBGrid;
..
以上是程式片段.
TntDBGrid1已是支援UNICODE的DELPHI元件TNTUnicodeControl之一的TntDBGrid元件
TntDB也引用在DFM

wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-06-07 23:58:24 IP:61.31.xxx.xxx 訂閱
再給你最後的提示,修改 DFM  中定義為 TStringGrid 改為TTntStringField !!!
在視窗上按下Ctrl F12

倒底沒有沒搞懂我的意思!
真的.......... 要睡覺了
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-06-08 07:56:58 IP:61.228.xxx.xxx 訂閱
照您所寫操作,但是找不到TStringGrid
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-06-08 11:28:54 IP:61.222.xxx.xxx 訂閱
睡迷糊了打錯了是TStringField 看你的 Field Type Ok!!!

===================引 用 t27 文 章===================
照您所寫操作,但是找不到TStringGrid
t27
中階會員


發表:34
回覆:95
積分:90
註冊:2002-06-19

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-06-08 23:20:58 IP:125.232.xxx.xxx 訂閱
謝謝回答.
依然無解,
OnGetText(Sender: TField; var Text: wideString; DisplayText: Boolean);
仍然無法取代OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
只好等待delphi for win32 org win64 支援 unicode 自然就解決unicode 的問題吧.
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-06-09 22:03:27 IP:211.22.xxx.xxx 未訂閱
你現在用的Delphi 6,7 不就是For Win32 的嗎?!到現在都還沒聽到消息Borland的Compiler有哪一種VCL支援Unicode的,包括Delphi 2007在內!如果你要等,那可能真有的等了~
如果所要寫支援Unicode的程式很急的話,何不就使用上述支援Unicode的Tnt For Unicode VCL?對 VCL 不熟要重新改寫元件的程式碼,不是一件很輕鬆的事情。
===================引 用 t27 文 章===================
謝謝回答.
依然無解,
OnGetText(Sender: TField; var Text: wideString; DisplayText: Boolean);
仍然無法取代OnGetText(Sender: TField; var Text: String; DisplayText: Boolean);
只好等待delphi for win32 org win64 支援 unicode 自然就解決unicode 的問題吧.
系統時間:2024-06-14 6:21:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!