正文

我学c++Builder系列(5)2008-05-25 15:12:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/goal00001111/35437.html

分享到:

三,添加事件处理:1,    窗体的构造函数:先在UnitMain.h中增加两个私有属性int ColorData[4];和int SpendTime;分别用来存储扑克牌图片信息和用户花费的时间。然后切换到UnitMain.cpp中,在窗体Form1的构造函数中,加入下列代码,用于初始化变量和组件:__fastcall TForm1::TForm1(TComponent* Owner)    : TForm(Owner){    ZeroMemory(ColorData, 0);    SpendTime = 0;}2,“开始”按钮的OnClick事件处理功能:点击“开始”按钮时,系统随机地发出四张纸牌,显示在四个Image组件中。并将“开始”按钮文字改变为“重新开始”。代码:void __fastcall TForm1::Button1Click(TObject *Sender){    randomize();    for (int i=0; i<4; i++)    {        ColorData[i] = random(10) + 1;  //随机给出扑克牌的点数        String FileName = "扑克牌图片\\dw_";        int num = random(4);   //随机给出扑克牌的花色        if (num == 0)            FileName += "c";        else if (num == 1)            FileName += "d";        else if (num == 2)            FileName += "h";        else            FileName += "s";        FileName += IntToStr(ColorData[i]);        FileName += ".bmp";        if (i == 0)  //根据给定的花色和点数信息,从文件中导入对应的扑克牌图片        {            Image1->Picture->Bitmap->LoadFromFile(FileName);        }        else if (i == 1)        {            Image2->Picture->Bitmap->LoadFromFile(FileName);        }        else if (i == 2)        {            Image3->Picture->Bitmap->LoadFromFile(FileName);        }        else        {            Image4->Picture->Bitmap->LoadFromFile(FileName);        }    }    Button1->Caption = "重新开始";  //改变Button1的Caption属性    Edit1->Text = "";    Edit1->SetFocus();    SpendTime = 0;          //开始计时    Timer1->Enabled = true;}3,“计算”按钮的OnClick事件处理功能:点击“开始”按钮时,系统计算用户在Edit组件中输入的运算表达式,并通知用户答案是否正确。如果用户输入了非法数据,系统会给出提示。代码:void __fastcall TForm1::Button2Click(TObject *Sender){    Timer1->Enabled = false;    if (!IsInputValide())  //自定义函数,用来判断输入的数据是否合法    {        //MessageBox(NULL, "您输入的数据不合法", "输入错误", MB_OK);        Edit1->SetFocus();        return;    }    const int ANSWER = 24;    int result;    try    {        result = TotalCompute(Edit1->Text); //自定义函数,用来计算表达式    }    catch(...)    {        MessageBox(NULL, "您的输入有误", "输入错误", MB_OK);        Edit1->SetFocus();        return;    }    if (result == ANSWER)    {        ShowMessage("对了,你真行!");    }    else    {        String answer = "您输入的表达式结果为" + IntToStr(result);        ShowMessage(answer);    }}4,OnCloseQuery事件句柄功能:当调用Close方法来关闭窗体时,OnCloseQuery事件发生。可以利用OnCloseQuery事件来询问用户是否真的希望马上关闭窗体。代码:void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose){    if (MessageDlg("确定退出应用程序?", mtConfirmation, mbOKCancel, 0) == mrOk)        CanClose = true;    else        CanClose = false;}5,计算用户花费时间功能:显示用户在计算时所花费的时间。每当用户按下“重新开始”按钮,则重新计时。代码:void __fastcall TForm1::Timer1Timer(TObject *Sender){    SpendTime++;    Label5->Caption = "使用时间:" + IntToStr(SpendTime) + "秒";}6,不响应非法字符功能:用户有可能在编辑框中输入数字和算术符号之外的其他字符,我们不应该响应这些非法字符。代码:void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key){    if (!((Key>='0' && Key<='9') || Key=='(' || Key==')' || Key == VK_BACK        || Key=='+' || Key=='-' || Key=='*' || Key=='/'))    {        Key = 0;    }}7,使用回车键代替单击“计算”按钮功能:用户在编辑框Edit1中输入表达式后,可以直接按回车键要求系统计算答案是否正确。代码:void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,      TShiftState Shift){    if (Key == VK_RETURN)    {           if (Edit1->Text == "114")        {            CunShuZi(ColorData); //  由系统给出正确答案             Edit1->SetFocus();        }        else        {            Button2Click(Sender);        }    }}

阅读(2394) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册