CSDN博客

img NetSniffer

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

发表于2004/10/14 10:38:00  1224人阅读

我记得有一段代码可以的

//获得当前类型标志
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

相关文章推荐

img
取 消
img