Keypress event |
答題得分者是:P.D.
|
James
高階會員 發表:10 回覆:290 積分:220 註冊:2002-07-25 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 請問一下各位先進,不知道有沒有人試過在 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, 所以也有處理到刪除的問題 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |