正文

我学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);
        }
    }
}

阅读(2213) | 评论(0)


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

评论

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