高手坐镇(04)
编程学堂
编程开发领域很广,开发途中遇到的问题千奇百怪,碰到问题找不到解决方法怎么办?需要高人指点!为此,我们特意开设此栏目,邀请四方开发高手来帮助大家。如果你在开发途中遇到问题,如果你有能力解决这些问题,欢迎与我们联系,来信请发到pcw-chendx@vip.sina.com。
C语言:输出为什么不是8
题目难度:★★
读者来信:我在网上看到一道题,Max=1+a+b=1+1+2=4,4*(4-1)=4*3=12,可答案是8,这是为什么?题目如下所示:
#define Max(x) x*(x-1)
main()
{int a=1,b=2;printf("%d\n",Max(1+a+b));
资深教师 李严同:这样的错误很多初学者都会犯,原因就是没有考虑运算的优先级,你一来就把Max计算出来了,却没有发现如果代入1+a+b,运算的优先级变了:1+a+b*(1+a+b-1) =1+1+2*(1+1+2-1)=2+2*3=8。
VB:毒软件设计思路
题目难度:★★★★
读者来信:我学了好久的VB,自我感觉开发水平相当不错啦。我使用金山、卡巴斯基等杀毒软件后产生了一个想法,想用VB设计一款杀毒软件,不知道可不可行?我还想问问,开发杀毒软件的思路是什么,请《电脑报》的高手赐教!
编辑 陈邓新:首先赞扬一下你勇于挑战的想法,然后小编告诉你用VB开发杀毒软件的可行性不高,就算开发出来性能也好不到哪去。原因很简单,Windows主要是由C语言代码组成的,所以最理想的开发语言是C语言。
杀毒软件的开发思路非常复杂,小编就挑核心的说一下:监控系统(包括文件、注册表等),发现病毒,终止病毒的进程,删除病毒主文件(清除被病毒感染的其他文件),删除病毒残留物(例如病毒的自启动项目)。这个过程非常复杂,版面有限就不展开了,有兴趣的朋友可以发邮件与我进行深入地探讨。
Delphi:Win 7日期格式变了
题目难度:★★★★
读者来信:安装Win 7后,我发现Delphi编写的程序运行报错,调试发现日期格式非法。深入研究发现,Win 7的日期格式是“2009/01/01”,而XP的日期格式是“2009-01-01”,我尝试把日期格式改为“2009/01/01”,程序又无法在XP下运行了。汗!请问这个问题怎么解决?
资深程序员 汪泓翰:这个问题困扰了很多人,我在编写黑客工具时就发现了。Win 7默认的日期格式为“yyyy/mm/dd”,XP默认的日期格式为“yyyy-mm-dd”,要使程序在Win 7和xp下都能正常运行,只需要在Form的Create事件中加入兼容代码。代码如下所示:
ShortDateFormat:='yyyy-mm-dd ';
DateSeparator:='-';
Delphi:软件是怎么更换皮肤的
题目难度:★★★
读者来信:我看到很多软件都有更换皮肤的功能,想知道这个功能是怎么设计的,我想给自己的Delphi程序也加上去!
资深程序员 彬彬:要更换皮肤,先准备若干个皮肤文件,分别命名为1.skin1、2.skin、3.skin、4.skin、5.skin……把.skin文件放在项目文件夹下skin文件夹中,再通过皮肤控件的SkinFile属性来更换皮肤。
方法1:随机更换皮肤
在程序中使用随机函数产生一个随机数,并把随机数指定皮肤文件(字符串),然后把此字符串指定给皮肤控件的SkinFile属性,最后激活即可。关键代码如下所示(完整代码下载地址:http://www.icpcw.com/bzsoft):
Randomize;//播下随机种子
i:=random(5)+1;//产生1~5的随机数
str1:=ExtractFilePath(Application.ExeName)+'skin\'+inttostr(i)+'.skn';//把随机数指定皮肤文件,运行后str1的值为:D:\working\pifu\skin\4.skn(路径+皮肤文件)
SkinData1.SkinFile:=str1;//指定皮肤文件为str1
SkinData1.Active:=true;//激活
方法2:手动更换皮肤
采用打开对话框的方式由用户自行更换皮肤。关键代码如下所示(完整代码下载地址:http://www.icpcw.com/bzsoft):
if OpenDialog1.Execute then//打开对话框
begin
str1:= ExtractFileName(OpenDialog1.FileName);//用户选择一个皮肤文件
SkinData1.SkinFile := str1;//把用户选择的皮肤文件赋值给SkinData1的SkinFile
SkinData1.Active := True;//激活