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

Keypress event

答題得分者是:P.D.
James
高階會員


發表:10
回覆:290
積分:220
註冊:2002-07-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-13 22:12:41 IP:220.134.xxx.xxx 未訂閱
請問一下各位先進,不知道有沒有人試過在 Delphi 元件的 Keypress 的事件中, 如果輸入的字是中文的話,要如何在那個事件中可以知道是哪個中文字 ? 原因 是這樣的,因為要修改一套國外的報表元件,但可能老外不知道有 IME 的處理, 因此那個元件在 Key 的相關事件改寫之後,造成中文不能輸入,小弟聯絡國外廠商 可能英文或者表達不是很恰當,寫了一個多月 N 封信都沒有回應,因此想要自己 試試看去修改,在此先謝謝各位的幫忙。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-15 10:27:21 IP:61.71.xxx.xxx 未訂閱
引言: 請問一下各位先進,不知道有沒有人試過在 Delphi 元件的 Keypress 的事件中, 如果輸入的字是中文的話,要如何在那個事件中可以知道是哪個中文字 ? 原因 是這樣的,因為要修改一套國外的報表元件,但可能老外不知道有 IME 的處理, 因此那個元件在 Key 的相關事件改寫之後,造成中文不能輸入,小弟聯絡國外廠商 可能英文或者表達不是很恰當,寫了一個多月 N 封信都沒有回應,因此想要自己 試試看去修改,在此先謝謝各位的幫忙。
這真的是很困難的, 我有寫一個很類似的程式段你參考看看, 但此段在某些狀況中文是分析不出來的, 也希望其他先進可以補強一下
procedure TFrame_IBquery.dbg_DataKeyPress(Sender: TObject; var Key: Char);
          var mlen: integer;
begin
     if length(mword)>=2 then setlength(mword,0);
     try
        mword:= mword Key;
        if IsDBCSLeadByte(Byte(mword[2])) then begin
           meQdata.Text:= meQdata.Text mword;
           setlength(mword,0);
        end
        else if (Key in ['0'..'9']) or
           (Key in ['a'..'z']) or
           (Key in ['A'..'Z']) or
           (Key in ['`','~','!','@','#','$','%','^','&','*','(',')','-','_',
                    ' ','=','|','\',',','<','.','>','/','?',';',':','[','{',
                    ']','}']) or
           (ord(Key)=32) or (ord(Key)=39) or (ord(Key)=34) then
        begin
           meQdata.Text:= meQdata.Text Key;
           setlength(mword,0);
        end
        else if (ord(Key)=8) and (length(meQdata.Text)>0) then  // VK_BACK
        begin
           mlen:= length(trim(meQdata.Text));
           if IsDBCSLeadByte(Byte(meQdata.Text[mlen])) then
              meQdata.Text:= copy(meQdata.Text,1,mlen-2)
           else meQdata.Text:= copy(meQdata.Text,1,mlen-1);
           setlength(mword,0);
        end;
     except
        setlength(mword,0);
     end;
end;    
1.mword 請先宣告在 private 為 string 2.我把keypress的值丟到一組 Tedit(meQdata)中 3.上面的運作主要是將Keypress值每兩個放在 mword中, 再用函數判斷是否為中文, 如果是則將合併成中文後放到 TEdit中 4.另外考慮到按下BackSpace, 所以也有處理到刪除的問題
系統時間:2024-03-29 17:17:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!