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

Delphi 2007 Intraweb 在OnAsync事件中 IWLabel中文顯示問題

答題得分者是:DevCoTW
yangtzuyi
一般會員


發表:4
回覆:9
積分:2
註冊:2007-03-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-28 02:19:20 IP:220.132.xxx.xxx 訂閱
 小弟目前正試寫Delphi 2007內帶的Intraweb套件,該套件直接支援Ajax的技術,也就是說可以不用post page就直接跟Server溝通處理事件,然而目前碰到一個怪問題就是在IWEdit的非同步事件中,不論是OnAsyncChange或者OnAsyncExit中,我更新IWLabel上的資料,會發生英文正常顯示,可是中文就不會更新的怪問題,想來請教各位前輩是否有碰到類似的問題?


Example:

procedure TRegisterForm.PassWDAsyncChange(Sender: TObject;
EventParams: TStringList);
begin
if (PassWD.GetTextLen < 6) then
PasswordLength.Caption := 'too short'; <--正常
PasswordLength.Caption := '請至少輸入六個字元'; <--不會更新畫面
end;
編輯記錄
yangtzuyi 重新編輯於 2007-05-28 02:19:47, 註解 無‧
yangtzuyi 重新編輯於 2007-05-28 02:21:15, 註解 無‧
yangtzuyi 重新編輯於 2007-05-28 02:22:43, 註解 無‧
wst
初階會員


發表:20
回覆:66
積分:37
註冊:2006-09-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-28 17:40:23 IP:163.29.xxx.xxx 訂閱
請問一下,如果您用一般的元件(win32),可以顯示正常的中文嗎?
資料庫、及元件都有支援相同的編碼?


如果我用Delphi for php 而資料庫是使用mysql時要先下一行指令
function Unit1Create($sender, $params)
{
$this->dbcib1->execute("set names utf8");

}
yangtzuyi
一般會員


發表:4
回覆:9
積分:2
註冊:2007-03-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-29 01:51:22 IP:220.132.xxx.xxx 訂閱
1,在Win32下是正常的
2.我測過應該是只有在Intraweb的套件上有問題, 我如果把edit內的文字直接貼過去可以work, 所以是型態轉換問題?

procedure TIWForm1.IWEdit1AsyncChange(Sender: TObject;
EventParams: TStringList);
begin
IWLabel1.Caption := IWEdit1.Text; <--這樣可以正常把Edit1裡我打的中文透過Async事件把字貼到Label上
IWLabel1.Caption := '不得低於六個字'; <--這樣就不行, 完全不更新, 但事件似乎有觸發
end;

但接下來的測試又推翻我的想法, 所以應該是delphi的bug?
procedure TIWForm1.IWEdit1AsyncChange(Sender: TObject;
EventParams: TStringList);
begin
IWEdit2.Text := '不得低於六個字'; <--照上面的例子如果是轉換問題, 那我就故意把中文塞進Edit2裡這樣應該可以貼上去
IWLabel1.Caption := IWEdit2.Text; <--結果不管是Edit或者Label都沒反應不更新
end;

以上所有問題只會發生在中文的處理, 英文字一切都正常
編輯記錄
yangtzuyi 重新編輯於 2007-05-29 01:57:00, 註解 無‧
yangtzuyi 重新編輯於 2007-05-29 01:59:21, 註解 無‧
DevCoTW
一般會員


發表:5
回覆:11
積分:18
註冊:2006-11-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-29 10:46:59 IP:61.62.xxx.xxx 訂閱
這是VCL For Web的一個Bug, 稍後的VCL For Web Update會修正.
目前要解決這個問題, 你可以使用
PasswordLength.Caption := Utf8Encode('請至少輸入六個字元');


===================引 用 yangtzuyi 文 章===================
小弟目前正試寫Delphi 2007內帶的Intraweb套件,該套件直接支援Ajax的技術,也就是說可以不用post page就直接跟Server溝通處理事件,然而目前碰到一個怪問題就是在IWEdit的非同步事件中,不論是OnAsyncChange或者OnAsyncExit中,我更新IWLabel上的資料,會發生英文正常顯示,可是中文就不會更新的怪問題,想來請教各位前輩是否有碰到類似的問題?


Example:

procedure TRegisterForm.PassWDAsyncChange(Sender: TObject;
EventParams: TStringList);
begin
if (PassWD.GetTextLen < 6) then
PasswordLength.Caption := 'too short'; <--正常
PasswordLength.Caption := '請至少輸入六個字元'; <--不會更新畫面
end;
yangtzuyi
一般會員


發表:4
回覆:9
積分:2
註冊:2007-03-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-29 14:52:45 IP:220.132.xxx.xxx 訂閱
試過了確實可以解決~感謝!
系統時間:2024-05-04 11:07:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!