三,添加事件处理:
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);
}
}
}
正文
我学c++Builder系列(5)2008-05-25 15:12:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/goal00001111/35437.html
阅读(2213) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论