三,添加事件处理: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); } }}

评论