会议间隙,走进休息室,MM正在电脑屏幕上大展神来之笔,一幅抽象主义水彩画正在她的笔下逐渐成型,当下心生赞叹,没想到技术部还有这样的人才,不由得景仰之情有如滔滔江水连绵不绝。突然想起自家的厨房正好缺一幅画,于是乎上前搭讪:
我:“这是什么?”
MM:“这是PhotoShop。”
我汗:“你在做什么?”
MM:“PhotoShop,是一个做图软件”
我巨汗之下,半响无语。叹息一声,转身走出了休息室。
虽然昨天喝多了,有些辞不达意,可是,可是我看上去真的那么象电脑白痴吗?
2007年11月19日 #
2007年6月29日 #
上面是程序运行时的界面,图中可以看到每天的上网总时间,以及每次连接和断线的时间;还能一并看到余下每天可用的平均上网时间。程序可以最小化到托盘,允许直接在TrayIcon的弹出菜单上进行连接和断线操作。
以下从代码说明此程序的核心功能部分:
const BasicUrl = 'http://192.168.1.1/';
const ConnectUrl = 'http://192.168.1.1/userRpm/StatusRpm.htm?Connect=连%20接&wan=1';
const DisconnectUrl = 'http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect=断%20线&wan=1';
这三行是TP-LINK无线路由器的基本设定URL。
procedure TMainForm.InitializeRouter;
begin
IdHttp1.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, ' +
'image/pjpeg, application/x-shockwave-flash, ' +
'application/vnd.ms-powerpoint, application/vnd.ms-excel, ' +
'application/msword, */*';
IdHttp1.Request.Referer := 'http://192.168.1.1/';
IdHttp1.Request.Host := '192.168.1.1';
IdHttp1.Request.AcceptLanguage := 'zh-cn';
IdHttp1.Request.AcceptEncoding := 'gzip,deflate';
IdHttp1.Request.UserAgent := 'Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.2;)';
IdHttp1.Request.Connection := 'Keep-Alive';
IdHttp1.Request.Password := '******';
IdHttp1.Request.Username := 'sunwaywei';
end;
这个函数是初始化路由器连接。程序使用IdHTTP组件来向路由器发送HTTP请求,函数中对请求的参数配置进行了基本设定。
procedure TMainForm.DoConnect;
begin
IdHttp1.Get(BasicUrl);
IdHttp1.Get(ConnectUrl);
FOnline := True;
FOnlineFrom := Now;
end;
procedure TMainForm.DoDisconnect;
begin
IdHttp1.Get(BasicUrl);
IdHttp1.Get(DisconnectUrl);
FOnline := False;
DBModule.InsertNewTimeRec(FOnlineFrom, Now);
FillDateList;
GetStatistics;
UpdateStatistics;
end;
以上两个函数控制路由器进行连接或是断线。在开发这里的时候,我发现很奇怪的现象,即在访问ConnectUrl或是DisconnectUrl之前,必须先访问一次BasicUrl,这样操作才能够成功。很奇怪,我也不理解为何会如此。总之是这样一做之后,就OK了。
上网计时部分对于有一些编程经验的人来说,应当是不太难的。从DoDisconnect函数中可以看到,当断线的时候,把本次上网时间插入数据库即可。至于按日期分类显示什么的功能,只要理清数据关系,也没什么难度。以下给出我所使用的几个SQL语句,供有兴趣的人参考或是批评指正。
const sqlGetDateList =
'SELECT DateValue(FromTime) as [Date],' +
'Sum(DateDiff("n", FromTime, ToTime)+1) as TotalTime ' +
'FROM TimeRec ' +
'where FromTime >= DateSerial(Year(Now),Month(Now),1) ' +
'group by DateValue(FromTime) ' +
'order by DateValue(FromTime) desc';
const sqlTotalMinutes =
'select Sum(DateDiff("n", FromTime, ToTime)+1) as TotalTime ' +
' from TimeRec where FromTime >= DateSerial(Year(Now),Month(Now),1)';
const sqlTodayMinutes =
'select Sum(DateDiff("n", FromTime, ToTime)+1) as TotalTime ' +
' from TimeRec where FromTime >= DateSerial(Year(Now),Month(Now),Day(Now))';
说明一下,我使用的是Access数据库,所以SQL语句中使用的Access函数。使用Sql Server的话还是需要修改的。
2006年12月30日 #
用Excel 2007做了个简单的上网时间计算程序,之前一直挺好,到了本月的倒数第二天,却发现了一个奇怪的现象,开始认为是Excel 2007的Bug,后来才发现是日期格式设置有误,呵呵。
请看上图,I15单元格是I13单元格除以I14单元格的结果,在剩余天数大于1的时候,剩余平均值计算一直是正确的,但到了今天,只剩下1天的时候,显示结果却不正确了。
后来仔细看了一下,才发现单元格的日期格式设置不正确,改为[h]:mm:ss之后,显示就正确了。
2006年12月27日 #
2006年11月2日 #
2006年9月22日 #
2006年9月13日 #
2006年8月21日 #
2006年8月11日 #
2006年8月8日 #