时间: 2021-07-31 作者:daque
越来越多的步调扶助在线晋级功效,正文引见的即是怎样从网站获得晋级消息。这边我重要运用本子消息来检验和测定能否须要载入晋级本子。大概道理如次: 1、安置消息文本到网站。 2、运用tnmhttp从网站消息文本获得文本实质。 3、领会文本领会所需消息。 4、比拟步调本子供给晋级消息。 开始,咱们安置一个消息文本到本人的网站,这个文本有本人的文献方法,我设置了如次的方法: [update] <ver>1.79.9.25</ver> <url>http://delphibox.com/softm/3_update.zip</url> <date>2002-9-25</date> [/update]咱们不妨将它生存为update.txt文献,运用[]<>的标示符将消息分门别类,这边包括了步调名、本子、革新日子和载入地方。这边我纵然上传到http://2ccc.com/update.txt。 而后咱们运用tnmhttp组件从网站获得此文献的实质:function tform1.getupdatetext:string;begin nmhttp1.inputfilemode := false; nmhttp1.outputfilemode := false; nmhttp1.reportlevel := status_basic; nmhttp1.get('http://2ccc.com/update.txt'); { 获得网站文本 } result:=nmhttp1.body;end; 获得文本此后,咱们要将个中的消息辨别,我运用了如次的因变量:function tform1.analyseupdate(body:string;var update:tupdate):boolean;var tmpstr,ver:string; function centerstr(src:string;before,after:string):string; { 这个因变量用来辨别两个字符串中央的字符串, 比方 ..('delphibox.com','delphi','.com')=>'box'。 } var pos1,pos2:word; begin pos1:=pos(before,src)+length(before); pos2:=pos(after,src); result:=copy(src,pos1,pos2-pos1); end;begin tmpstr:=centerstr(body,'update'); { 获得步调名间的晋级消息 } if tmpstr='' then result:=false else { 找不到此文献晋级消息 } begin ver:=centerstr(tmpstr,'<ver>','</ver>'); update.version:=separateverstr(ver); { 领会本子 } update.date:=strtodate(centerstr(tmpstr,'<date>','</date>')); { 领会日子 } update.url:=centerstr(tmpstr,'<url>','</url>'); { 领会晋级地方 } result:=true; end;end;个中tupdate是我设置的消息的记载方法: tsimpleversion=record { 简化的本子消息 } dwproductversionms: dword; { 主本子 } dwproductversionls: dword; { 辅本子 } end; tupdate=record { 晋级消息 } name:string[63]; { 步调名 } version:tsimpleversion; { 本子 } date:tdate; { 日子 } url:shortstring; { 载入地方 } end;而separateverstr()因变量是将获得字符串情势的晋级本子消息变换为简化的本子消息方法:function separateverstr(s:string):tsimpleversion;const separator='.'; { 觉得'.'分隔符 }var p,v1,v2,v3,v4:word;begin if length(s)=0 then exit; p:=pos(separator, s); v1:=strtoint(copy(s,1,p-1)); delete(s,1,p); p:=pos(separator,s); v2:=strtoint(copy(s,1,p-1)); delete(s,1,p); p:=pos(separator,s); v3:=strtoint(copy(s,1,p-1)); delete(s,1,p); v4:=strtoint(s); result.dwproductversionms:=v1*$10000+v2; result.dwproductversionls:=v3*$10000+v4;end; 结果要做的即是比拟文献的本子消息,先获得本人的本子,我运用如次的因变量:function getbuildinfo(fname:string):tsimpleversion; { 获得自己本子消息 }var verinfosize: dword; verinfo: pointer; vervaluesize: dword; vervalue: pvsfixedfileinfo; dummy: dword;begin verinfosize := getfileversioninfosize(pchar(fname), dummy); getmem(verinfo, verinfosize); getfileversioninfo(pchar(paramstr(0)), 0, verinfosize, verinfo); verqueryvalue(verinfo, '\', pointer(vervalue), vervaluesize); with vervalue^ do begin result.dwproductversionms := dwfileversionms; { 主本子 } result.dwproductversionls := dwfileversionls; { 辅本子 } end; freemem(verinfo, verinfosize);end;而后运用如次的因变量比拟网站的晋级本子和此刻的本子,即使归来true,证明有新本子文献:function versioncheck(oriver,newver:tsimpleversion):boolean;begin if (oriver.dwproductversionms=newver.dwproductversionms) then begin result:=oriver.dwproductversionls<newver.dwproductversionls; end else begin result:=oriver.dwproductversionms<newver.dwproductversionms end;end; 到这边基础本领就引见结束,我在delphi+win2000情况调节和测试经过,这边我没有写出完备的代码,在我的网页我做了演练步调,大师不妨载入渐渐接洽。我的网址是:http://delphibox.com 或 http://2ccc.com即使有题目不妨给我来函交谈:mantousoft@vip.163.com 重庆 万重 西安高科技学院143邮箱 710054