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

dbgrid 中如何攔截中文字?

缺席
P.D.
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-25 22:47:57 IP:61.71.xxx.xxx 未訂閱
請問各位! 我想在dbgrid中的 onkeydown , 如果對方輸入中文字我可以完整攔截並將該中文字轉到一個 tedit 上, 查了站上一些討論沒有看到, 恕我眼拙! 謝謝!
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-26 02:08:08 IP:61.71.xxx.xxx 未訂閱
我在 onKeyPress 中如此撰寫, 可以達到部份中文填入 tedit的要求, 伹有一半的中文字仍無法正確的顯示出來, 如上, 紅.... 不知有何解決方法?    
private
   mword: string;
public
....
...
procedure TForm1.dbGrid1Press(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
           Edit1.Text:= Edit1.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
           Edit1.Text:= Edit1.Text Key;
           setlength(mword,0);
        end
        else if (ord(Key)=8) and (length(Edit1.Text)>0) then  // VK_BACK
        begin
           mlen:= length(Edit1.Text);
           if IsDBCSLeadByte(Byte(Edit1.Text[mlen])) then
              Edit1.Text:= copy(Edit1.Text,1,mlen-2)
           else Edit1.Text:= copy(Edit1.Text,1,mlen-1);
           setlength(mword,0);
        end;
     except
        setlength(mword,0);
     end;
end;    
發表人 - P.D. 於 2005/09/26 02:14:37
系統時間:2024-05-19 15:36:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!