试试在onchange里对TEdit里的文本做一下判断,把其中连续编码大于160的文字删掉。
如果只禁输入法的话,别人照样可粘贴过来。

解决方案 »

  1.   

    没研究过
    想象在ONCHANG中判断即可
      

  2.   

    连续编码大于160的字符一定是汉字吗?
    我听人说是大于128的字符?
    到底是哪??
    Who can help me?
      

  3.   

    void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
      for(int i=0;i<Edit1->Text.Length();i++)
      {
        if(Edit1->Text.IsTrailByte(i)||Edit1->Text.IsLeadByte(i))
        {
          Edit1->Text="";
          return;
        }
      }
    }
      

  4.   

    原理:IsTrailByte和IsLeadByte分别判断指定字符是否多字节码的最后一个和第一个,用这个方法可屏蔽所有多字节码(包括中文)。
      

  5.   

    在onpreviewkey(记不清了,大概是这样)中事件中
    key:= char(0);
    即可将一切键盘输入转化为空,也就达到了禁止的目的。
    因为有一段时间没机子做Delphi了,对于事件名称参数名都记不太清楚了,在IDE里可以获得提示。
      

  6.   

    请问Detective,delphi中是否有你提到的函数?
    请问progray,你的方法是否可用于屏蔽中文?
      

  7.   

    回seagate,我只知道这样屏蔽非中文
    我有很长时间没有接触了,好象是这样的
    在keypress事件中不是有var:key吗,
    在其中的语句中添加语句,例如屏蔽0--9
    if key not in ('0'..'9') then key:=char(0);
    以此类推
      

  8.   

    就是在Onkeypress事件中
    key:= char(0); 
    所有输入全部屏蔽;
    如果屏蔽中文,就用zxb1106(宇飞)的做法。
      

  9.   

    给你一个自己编写的函数,用起来很方便
    function IsFloat(Owner:TEdit;nLength:integer;nDec:integer;key:char;nSign:integer):char;
    var
        nKeyValue:integer;
        str,str1:string;
    begin
    if nDec=0 then
         nlength:=nlength+1;
        str:=owner.Text;
    nKeyvalue:=ord(key);
        case nKeyValue of
        //0-9数字
        48..57:
        if owner.SelLength=0 then
        begin
          if pos('.',str)<>0 then
          begin
            if (pos('+',str)<>0) or (pos('-',str)<>0) then
            begin
              if (owner.SelStart<pos('.',str)) then
                begin
                  str1:=copy(str,1,pos('.',str)-1);
                  if length(str1)-1>=nlength-ndec-1 then
                  key:=chr(0);
                end
                else
                begin
                str1:=copy(str,pos('.',str)+1,100);
                if (length(str1)>=ndec) then
                key:=chr(0);
                end;
            end
            else
            begin
              if (owner.SelStart<pos('.',str)) then
              begin
                str1:=copy(str,1,pos('.',str)-1);
                if length(str1)>=nlength-ndec-1 then
                key:=chr(0);
              end
              else
              begin
                str1:=copy(str,pos('.',str)+1,100);
                if (length(str1)>=ndec) then
                key:=chr(0);
            end;
          end;
        end
        else
        begin
          if (pos('+',str)<>0) or (pos('-',str)<>0) then
          begin
            if (length(str)-1>=nlength-ndec-1) then
            key:=chr(0);
            end
            else
            begin
              if (length(str)>=nlength-ndec-1) then
              key:=chr(0);
            end;
          end;
        end;
        //return回车
        13:;
        //backspace
        8: ;
        //+加号
        43:
        if (nSign<>2) and (nSign<>3) then
        key:=chr(0)
        else
        begin
          if (pos('+',str)<>0) or (pos('-',str)<>0) then
          key:=chr(0)
          else
          begin
           if owner.SelStart<>0 then
            key:=chr(0);
          end;
        end;
        //- 减号
        45:
        if (nSign<>1) and (nSign<>3) then
        key:=chr(0)
        else
        begin
          if (pos('+',str)<>0) or (pos('-',str)<>0) then
          key:=chr(0)
          else
          begin
            if owner.SelStart<>0 then
    key:=chr(0);
          end;
        end;
        //.小数点
        46:
        if nDec=0 then
        key:=chr(0)
        else
        begin
          if (pos('.',str)<>0) then
          key:=chr(0)
          else
          begin
            if owner.SelStart=0 then
            key:=chr(0);
          end;
        end;
        //in key_down 37,38,39,40,left,up,righ,down,左,上,右,下
        //ind key_down 46:
        else
        key:=chr(0);
        end;
        isfloat:=key;
    end;
      

  10.   


    能不能先判断当前的输入法呢,仅接收英文输入法.
    非英文输入法状态下key:=#0;