BCB::在Edit中粘贴数字响应

我记得有一段代码可以的

//获得当前类型标志
LONG dwStyle = GetWindowLong(Edit1->Handle, GWL_STYLE);
//加入 ES_NUMBER 类型
SetWindowLong(Edit1->Handle, GWL_STYLE, dwStyle | ES_NUMBER);

你试试这段代码,如果行的话给分,好吗?


如果楼主要求的只是输入0到9的数字,那么楼上的方法确实简单可行。

如果允许Edit输入科学记数呢?(例如:3e1,这也是标准的数值呀)
还有负数或者小数呢(例如:-1,1.2)等等

上面的代码恐怕就不理想了。我经过反复调试,下面代码能够满足这样的要求:
只允许Edit1输入任何有效的数值。不妨试试。为了使界面更完备,我用一个
全局变量nPos来记忆Edit的光标位置,当然如果想简洁的话也可以去掉。

//---------------------------------------------------------------------------
String sTemp="";    //全局变量,记忆Edit原来的数字
int nPos=0;         //全局变量,记忆Edit的光标位置
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    try
    {
        String s=Edit1->Text;
        if(!s.IsEmpty())s.ToDouble();
        sTemp=s;
    }
    catch(...)
    {
        ShowMessage("骗我!不是数字哪.");
        Edit1->Text=sTemp;
        Edit1->SelStart=nPos;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
     nPos=Edit1->SelStart;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
     nPos=Edit1->SelStart;
}
//---------------------------------------------------------------------------

///

一个较简单的做法

AnsiString InputKey = Key;
AnsiString ValidKey = AnsiString("0123456789.CcVv");//这里放你希望能输入的可见字符
AnsiString ContrlKey = AnsiString("CcVv");//这里放控制字符          

//如果按键为 back space 或 tab则不判断
if((Key != VK_BACK) || (Key != VK_TAB))//这里为不可见字符的判断
{
    //判断输入的字符是否在ValidKey中,不是则将输入设置为空
    if (ValidKey.Pos(InputKey) == 0)
    {
        Key = 0;
    }
    else if(ValidKey.Pos(InputKey) != 0)
    {
        //在这里查看ctrl键是否按下,如没 则认为无效,使用winAPI获取
        if((GetKeyState(VK_RCONTROL) && 0x80) == 0)
        {
            //ctrl 没有按下 ,无效该输入
            Key = 0;
        }

        //来到这里,则为热键输入,将自动相应 edit注册的热键,无需控制
       
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值