博文

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

摘要:三,添加事件处理:
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_";
      &......

阅读全文(2104) | 评论:0

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

摘要: 速算24游戏                                                  作者:goal00001111   一,程序效果说明:        速算24游戏的规则是由系统发出4张扑克牌,要求用户利用扑克牌显示的数字,通过加减乘除运算得出24(可使用括号),为了计算方便,不会出现J,Q,K和王牌。        当启动应用程序后,程序界面如图1所示。
       点击“开始”按钮,游戏开始,系统将发出4张扑克牌。这时游戏的界面如图2所示。
       这时用户利用扑克牌显示的数字,通过加减乘除运算,以最快的速度得出24(可使用括号)。然后在文本框中写好表达式,接着点击“计算”按钮。这时系统会计算输入表达式的结果,并告诉用户答案是否正确。        如下图所示分别是计算正确和错误的界面。
       如果错了可以再次输入新的表达式,重复上一步。直到您的表达式正确,这时系统会恭喜你算对了。        游戏还可以计算用户花费的时间,并且能够判断用户的输入是否出现了错误和屏蔽一些不正确的输入,如字母和其他非法字符等等。 ......

阅读全文(2356) | 评论:0

浅析OnKeyPress事件和OnKeyDown/OnKeyUp事件(2008-05-20 15:22:00)

摘要: 浅析OnKeyPress事件和OnKeyDown/OnKeyUp事件  
OnKeyPress事件     OnKeyPress事件是在用户按下键盘上任何一个可打印的字符时发生,只有能接收键盘输入的组件才有OnKeyPress事件。我们常常利用OnKeyPress事件截取在编辑框和组合框组件中所输入的击键,还可以立即测试击键的有效性或在字符输入时对其进行一定的格式处理。     例如,在TEdit组件上捕获OnKeyPress事件,判断输入的是否是小写字母,如果是,将其转换为大写字母,代码如下:     void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) {     if (Key >= 'a' && Key <= 'z')     {        Key += 'A' - 'a';     } } 将Key的值改变为0时可取消击键,这样一来对象便接收不到字符,我们可以利用这个特点来屏蔽某些字符。例如,有时候我们只允许用户输入数字,则加入如下代码: void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) {     if (Key < '0' || Key > '9')     {         Key = 0;//取消刚才输入的字符     } } 注意:OnKeyPress事件可以引用任何可打印的键盘字符,一个来自标准字母表的字符或少数几个特殊字符之一的字符与 CTRL 键的组合,以及 ENTER 或 BACKSPACE ......

阅读全文(9192) | 评论:2

C++builder组件属性详解(1)(2007-11-30 18:30:00)

摘要:C++builder组件属性详解 尽管C++Builder的组件种类繁多,每种组件又都有许多不同的属性,但是在这些众多的属性中有相当一部分是大多数组件所共有的。因此我们应当主要掌握这些共有组件。 在设计时设置属性一般是通过属性窗口来进行的。在属性窗口设置组件属性的操作步骤如下: 1) 打开相应对象的属性窗口。 2) 从属性列表中选定属性名称。 3) 在属性窗口的右列输入或选择新的属性值。 注意:有些属性在设置值右侧有…按钮,单击该按钮会出现相应的设置对话框,设置值需要在对话框中选定。 在代码中设置组件属性的方法是: 对象名称->属性名称 = 设置值; 下面我们来介绍一些主要组件的主要属性。 窗体form的属性: 1.Caption:标题。是窗体和各种可视化控件的共有属性,用来指定窗体标题栏中的说明文字,默认与控件名相同,但程序员可以在对象监视器和代码中修改。 在代码中修改的格式为:Form->Caption = "da";// da表示程序员输入的标题。 通常,对于Windows系统中的多文档界面( MDI )应用程序,当主框架窗口中的子窗口以最大化显示的时候,应用程序的标题栏中显示的内容为“ - ”;当子窗口以非最大化窗口显示的时候,主框架窗口中只显示应用程序的名称,子窗口有自己的标题栏,其中显示该窗口打开的文件名。所以,当窗体的显示方式发生了改变后,应该立即改变标题栏中的内容。 2.Name:变量名。是窗体和所有控件的共有属性,系统给予其默认名字,但程序员可以在对象监视器修改,不要在代码中修改。 通常,应该在系统开发的设计阶段就将整个工程中所有窗体的名称确定,然后在编程阶段,根据设计文档修改窗体的Name属性。一般情况下,不要在程序运行期间通过代码修改Name属性。 3.Enabled:可操作性。决定了对象在运行时是否允许用户进行操作。 它是逻辑型:true表示允许用户操作并可对其操作作出响应;false表示禁止用户操作,此时对象呈灰色。 程序员可以在对象监视器和代码中修改属性Enabled。 在代码中修改的格式为:Form-> Enabled = da;// da可以是true或false。 4.Visible:可见性。决定了对象在运行时是否可见。 它也是逻辑型:true表示可见;false......

阅读全文(2448) | 评论:0

代理服务器(Proxy)完全解析(转帖)(2007-10-12 21:45:00)

摘要:代理服务器(Proxy)完全解析
2002-01-04 10:07:00· 约翰牛· linkwan
http://www.yesky.com/20011130/207727.shtml 相信,提起代理服务器(Proxy)还是有非常多的人关注的,因为无论是在线论坛(bbs)或者是新闻组里面,作为一个撰稿人,我的信箱里也经常收到询问代理服务器为何物,或者如何设置代理服务器这类的问题,所以,我觉得有必要总结一下,把我对代理服务器的认识和在实际应用中各种相关网络应用软件的代理服务器设置告诉大家,这就是本文写就的来由了。    什么是代理服务器(Proxy)?   什么是代理服务器呢?   如果我告诉你,用代理服务器可以免费访问Internet,可以加速访问速度,可以访问无法直接访问的站点,可以部分解决网络IP地址紧缺的问题……,您一定认为,天下哪有这等美事?如果您能耐心看完冗长的本文,您就会确信我说的话毫不夸张,如果应用得当,可以每月为您节省一笔可观的上网费用,就用不着每个月战战兢兢的跑到电信局一五一十的把"血汗钱""捐献"给ISP了。   代理服务器的工作机制   代理服务器的工作机制很象我们生活中常常提及的代理商,假设你自己的机器为A机,你想获得的数据由服务器B提供,代理服务器为C,那么具体的连接过程是这样的。   首先,A机需要B机的数据,A直接与C机建立连接,C机接收到A机的数据请求后,与B机建立连接,下载A机所请求的B机上的数据到本地,再将此数据发送至A机,完成代理任务。   代理服务器存在的理由   或许你要问了,何必这么麻烦呢?A机与B机直接建立不是很好么?请耐心听我讲完,使用代理服务器当然有其存在的合理理由:   1、局域局内没有与外网相连的机器通过内网的代理服务器连接到外网。这个例子,最有说服力的就是小办公室的上网解决方案了,利用办公室原有的局域网,只要简单的利用一根电话线、一个合法帐号(在ISP初申请得到拨号号码和用户名和密码),加上一个简单的代理软件(如Sygate,WinGate,Winrouter)就可以方便的以最小的花费将整个办公室的电脑与互联网络相连接。   2、为了获得更大的速度,通过频宽较大的proxy与目标主机连接。访问台湾部分站点的速度大家相必已经领教过了,如果我们使用一......

阅读全文(4531) | 评论:1

什么是端口?(转帖)(2007-10-12 21:04:00)

摘要:什么是端口?     可以这样说:端口便是计算机与外部通信的途径,没有它,计算机便又聋又哑。     在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由 器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我们 这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。     那么TCP/IP协议中的端口指的是什么呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口 可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。     端口有什么用呢?我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、ftp服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。     需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则 可能使用“3457”这样的端口,如图1所示。   图1     按对应的协议类型,端口有两种:TCP端口和UDP端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。     现在讲一下什么是端口号,一个端口就是一个潜在的通讯通道,也是一个入侵通道,开放一个端口就是一台计算机在网络上打开了一扇窗户,黑客入侵的方法就是用手工扫描或利用扫描软件找到服务器所开放的端口,去根据其相应的漏洞对服务器进行入侵或攻击,因此对端口的了解是非常重要的。    端口大概分为三类:   1:公认端口(well known ports):范围从0到1023,他们是绑定于一些服务。通常这些端口的通信明确表明了某种服务的协议。其中80端口......

阅读全文(4453) | 评论:2

如何隐藏自己的IP地址?(转帖)(2007-10-12 20:37:00)

摘要:首先说说隐藏真实IP的方法,最简单的方法就是使用代理服务器。与直接连接到Internet相比,使用代理服务器能保护上网用户的IP地址,从而保障上网安全。代理服务器的原理是在客户机和远程服务器之间架设一个“中转站”,当客户机向远程服务器提出服务要求后,代理服务器首先截取用户的请求,然后代理服务器将服务请求转交远程服务器,从而实现客户机和远程服务器之间的联系。很显然,使用代理服务器后远端服务器包括其它用户只能探测到代理服务器的IP地址而不是用户的IP地址,这就实现了隐藏用户IP地址的目的,保障了用户上网安全。而且,这样还有一个好处,那就是如果有许多用户共用一个代理器时,当有人访问过某一站点后,所访问的内容便会保存在代理服务器的硬盘上,如果再有人访问该站点,这些内容便会直接从代理服务器中获取,而不必再次连接远端服务器,因此可以节约带宽,提高访问速度。
    建议您最好用免费代理服务器,寻找免费代理服务器的方法有很多,你可以试试用ProxyHunter(代理猎手),它能自动为您搜索出多个免费代理服务器,并验证各个服务器的连接速度,从而让你选择最佳途径。更重要的是,代理服务器不仅支持浏览软件,而且支持电子邮件、FTP、下载、离线浏览等功能软件,可谓无所不在。【点击下载代理猎手 3.1】。不过这种方法比较费时、费事,建议不到万不得以时还是不用为好。最好的方法是使用现成的免费代理服务器,现在网上有不少网站定期提供最新的免费代理服务器,如这里提供的代理服务器的更新速度就非常快,而且各种类型的代理都有:http://www.emaga.net/8341/myann/index.asp 。建议大家把这个网页放入你的收藏夹,这样你就再也不用为找不到好的免费代理服务器而发愁了。
    找到免费代理服务器后,就可以使用它了。以IE浏览器为例,运行IE,点击“工具”→“Interner选项”,在弹出的“Interner选项”对话框中选择“连接”标签,再点击“设置”按钮,在弹出的对话框中把“对此连接使用代理服务器”前面的框勾选上,然后在“地址”和“端口”栏中填入你找到的代理服务器IP和所用端口即可。
    同时在“高级”设置中你还可以对不同的服务器,例如HTTP、FTP设定不同......

阅读全文(2882) | 评论:0

特殊用途的IP地址介绍(转帖)(2007-10-12 20:26:00)

摘要:特殊用途的IP地址介绍 一、0.0.0.0     严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。       二、255.255.255.255     限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。如果翻译成人类的语言,应该是这样:“这个房间里的所有人都注意了!”这个地址不能被路由器转发。       三、127.0.0.1     本机地址,主要用于测试。用汉语表示,就是“我自己”。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。       四、224.0.0.1     组播地址,注意它和广播的区别。从224.0.0.0到239.255.255.255都是这样的地址。224.0.0.1特指所有主机,224.0.0.2特指所有路由器。这样的地址多用于一些特定的程序以及多媒体程序。如果你的主机开启了IRDP(Internet路由发现协议,使用组播功能)功能,那么你的主机路由表中应该有这样一条路由。       五、169.254.x.x     如果你的主机使用了DHCP功能自动获得一个IP地址,那么当你的DHCP服务器发生故障,或响应时间太长而超出了一个系统规定的时间,Wingdows系统会为你分配这样一个地址。如果你发现你的主机IP地址是一个诸如此类的地址,很不幸,十有八九是你的网络不能正常运行了。     ......

阅读全文(1918) | 评论:0

什么是IP地址?(转帖)(2007-10-12 20:25:00)

摘要:随着电脑技术的逐步普及和因特网技术的迅猛发展,学习因特网、利用因特网已不再是那些腰缠万贯的大款和戴者深度眼睛的专业技术人员的专利,它已作为二十一世纪人类的一种新的生活方式而逐步深入到寻常百姓家。谈到因特网,IP地址就不能不提,因为无论是从学习还是使用因特网的角度来看,IP地址都是一个十分重要的概念,INTERNET的许多服务和特点都是通过IP地址体现出来的。   一、IP地址的概念     我们知道因特网是全世界范围内的计算机联为一体而构成的通信网络的总称。联在某个网络上的两台计算机之间在相互通信时,在它们所传送的数据包里都会含有某些附加信息,这些附加信息就是发送数据的计算机的地址和接受数据的计算机的地址。象这样,人们为了通信的方便给每一台计算机都事先分配一个类似我们日常生活中的电话号码一样的标识地址,该标识地址就是我们今天所要介绍的IP地址。根据TCP/IP协议规定,IP地址是由32位二进制数组成,而且在INTERNET范围内是唯一的。例如,某台联在因特网上的计算机的IP地址为: 11010010 01001001 10001100 00000010    很明显,这些数字对于人来说不太好记忆。人们为了方便记忆,就将组成计算机的IP地址的32位二进制分成四段,每段8位,中间用小数点隔开,然后将每八位二进制转换成十进制数,这样上述计算机的IP地址就变成了:210.73.140.2。   二、IP地址的分类     我们说过因特网是把全世界的无数个网络连接起来的一个庞大的网间网,每个网络中的计算机通过其自身的IP地址而被唯一标识的,据此我们也可以设想,在INTERNET上这个庞大的网间网中,每个网络也有自己的标识符。这与我们日常生活中的电话号码很相像,例如有一个电话号码为0515163,这个号码中的前四位表示该电话是属于哪个地区的,后面的数字表示该地区的某个电话号码。与上面的例子类似,我们把计算机的IP地址也分成两部分,分别为网络标识和主机标识。同一个物理网络上的所有主机都用同一个网络标识,网络上的一个主机(包括网络上工作站、服务器和路由器等)都有一个主机标识与其对应。IP地址的4个字节划分为2个部分,一部分用以标明具体的网络段,即网络标识;另一部分用以标明具体的节点,即主机标识,也就是说某个网络中的......

阅读全文(2515) | 评论:0

算法设计之分治法(4)(2007-10-09 10:52:00)

摘要:参考程序 1.常规算法,复杂度为O(N): double Power(double x, unsigned int N) {     double result = 1.0;     for (unsigned int i=0; i<N; i++)         result *= x;     return result; } 折半算法(二分法),复杂度为O(logN): double Power(double x, unsigned int N) {     if (N == 0)         return 1.0;             double t = Power(x, N/2);     if (N % 2 == 0)         return t * t;     else         return t * t * x; } 2.算法分析:在讲解枚举法时,我们讨论了如何用枚举法求解此题,但如果求解的精度进一步提高,使用枚举法就无能为力了,在此我们再一次讨论如何用二分法求解此题。 由题意知(i,i+1)中若有根,则只有一个根,我们枚举根的值域中的每一个整数x(-100≤x≤100),设定搜索区间[x1,x2],其中x1=x,x2=x+1。若: ⑴f(x1)=0,则确定x1为f(x)的根; ⑵f(x1)*f(x2)<0,则确定根x在区间[x1,x2]内。 ⑶f(x1)*f(x2)>0,则确定根x不在区间[x1,x2]内,设定[x2,x2+1]为下一个搜索区间; 若确定根x在区间[x1,x2]内,采用二分法,将区间[x1,x2]分成左右两个子区间: 左子区间......

阅读全文(2914) | 评论:1