﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-学好delphi-随笔分类-delphi网络编程</title><link>http://www.cnitblog.com/shuyezi122/category/7967.html</link><description>我delphi笔记,你的参与就是对我最大的支持,还有汇编语言也在学
我的QQ群:79598397
</description><language>zh-cn</language><lastBuildDate>Tue, 27 Sep 2011 21:12:37 GMT</lastBuildDate><pubDate>Tue, 27 Sep 2011 21:12:37 GMT</pubDate><ttl>60</ttl><item><title>对网络文件.图片下载</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/01/18/53859.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Sun, 18 Jan 2009 14:38:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/01/18/53859.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/53859.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/01/18/53859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/53859.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/53859.html</trackback:ping><description><![CDATA[&nbsp;uses&nbsp; UrlMon;<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>URLDownloadToFile(nil,'<a href="http://www.baidu.com/img/baidu_logo.gif">http://www.baidu.com/img/baidu_logo.gif</a>',<br>'c:\12.txt',0,nil);<br>end;<br><br>图片文件都可以!<br>还可以对自己盘内实现复制<br>&nbsp;uses&nbsp; UrlMon;<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>URLDownloadToFile(nil,'f:\ceshi.txt','c:\12.txt',0,nil);<br>end;<br><br>HRESULT URLDownloadToFile(<br>LPUNKNOWN pCaller,<br>LPCSTR szURL,<br>LPCSTR szFileName,<br>DWORD dwReserved,<br>LPBINDSTATUSCALLBACK lpfnCB);<br>pCaller<br>仅当调用者是一个ActiveX对象才使用，对于一个非ActiveX对象的应用程序这个参数应该为NULL<br>szURL<br>为要下载的绝对URL 文件名，这个参数不能为空。<br>szFileName<br>包含创建的目标文件名<br>dwReserved<br>必须为零<br>lpfnCB<br>一个指向 IBindStatusCallback 接口的指针, IE通过它向你通知下载的进度<br><br><br>再说一种方法<br>&nbsp;uses gifimage;//这里去网上下载<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; ms: TMemoryStream;<br>&nbsp; pic: TGIFImage;<br>begin<br>ms:=tmemorystream.Create;<br>idhttp1.Get('http://www.baidu.com/img/baidu_logo.gif',ms);<br>ms.Position:=0;//移动指针到最开头的位置<br>if ms.Size=0 then//如果文件大小等于0，那么...<br>begin<br>showmessage('出错');<br>ms.Free;<br>Exit;<br>end;<br>pic:=tgifimage.Create;<br>pic.LoadFromStream(ms);<br>image1.Picture.Graphic:=pic;<br>ms.Free;<br>pic.Free;<br>end;<br><em><br></em>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/53859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-01-18 22:38 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/01/18/53859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>delphi idftp几个简单函数</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53522.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Mon, 05 Jan 2009 17:54:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53522.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/53522.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53522.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/53522.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/53522.html</trackback:ping><description><![CDATA[1&nbsp; 连接远程服务器<br>procedure Connect(AAutoLogin: boolean; const ATimeout: Integer);<br>2&nbsp; 改变目录<br>procedure ChangeDir(const ADirName: string);<br>3&nbsp; 下载<br>procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean); overload;<br>procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean; AResume: Boolean); overload;<br>4&nbsp; 上传<br>procedure Put(const ASource: TStream; const ADestFile: string; const AAppend: boolean); overload;<br>procedure Put(const ASourceFile: string; const ADestFile: string; const AAppend: boolean); overload;<br>5&nbsp; 删除<br>procedure Delete(const AFilename: string);<br><br><br>判断是否连接<br>if&nbsp; IdFTP1.Connected&nbsp; then<br>begin<br>...........<br>end; <br><br>引用别人一下,做为自己以后笔记<br><br>&nbsp;&nbsp;&nbsp; 现在很多应用都需要上传与下载大型文件，通过HTTP方式上传大文件有一定的局限性。幸好FTP作为一个非常老而且非常成熟的协议可以高效稳定地完成大文件的上传下载，并且可以完美地实现续传。就拿我写的电影服务器管理端程序来说，各种方案比较后，发现使用FTP可以完美地实现要求。但是要通过WinSocket库实现FTP比较麻烦，幸好有Indy--一个包装了大多数网络协议的组件包。 <br>&nbsp;&nbsp;&nbsp;&nbsp; 通过Indy，程序设计人员可以通过阻塞方式进行编程，可以抛开蹩脚的Winsocket异步模式，采用与Unix系统上等同的阻塞编程模式进行。这样，程序员就可以很好的处理程序的运行流程。
<p>&nbsp;&nbsp;&nbsp;&nbsp; 下面，我们进入到Indy的TIdFtp世界。</p>
<p>1.控件的说明</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 使用Indy 9中的TIdFtp控件可以实现通过FTP方式进行文件的上传与下载。</p>
<p>2.控件的具体使用</p>
<p>（1）控件属性设置</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 默认属性即可，与服务器连接直接相关的属性如主机名与用户等在建立连接时进行设定。需要设定的是RecvBufferSize和SendBufferSize两属性的值。另外需要根据要传输的文件类型指定TransferType属性，而其他属性按默认值设定即可。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; RecvBufferSize说明（默认值为8192字节）：该属性为整型变量，用于指定连接所用的接受缓冲区大小。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; SendBufferSize说明（默认值为32768字节）：该属性也为整型变量，用于指定连接所用的发送缓冲区的最大值。该属性在WriteStream方法中时，可用于TStream指定要发送内容的块数。如果要发送的内容大于本属性值，则发送内容被分为多个块发送。</p>
<p>TransferType说明（默认值为ftBinary）：该属性为TIdFTPTransferType型变量。用于指定传输内容是二进制文件（ftBinary ）还是ASCII文件（ftASCII）。应用程序需要使用二进制方式传输可执行文件、压缩文件和多媒体文件等；而使用ASCII方式传输文本或超文本等文本型数据。</p>
<p>（2）控件的事件响应</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; OnDisconnected响应：TNotifyEvent类，用于响应断开（disconnect）事件。当Disconnect方法被调用用来关闭Socket的时候，触发该响应。应用程序必须指定该事件响应的过程，以便对该断开事件进行相应。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; OnStatus响应：TIdStatusEvent类。该响应在当前连接的状态变化时被触发。该事件可由DoStatus方法触发并提供给事件控制器属性。axStatus是当前连接的TIdStatus值；aaArgs是一个可选的参数用于格式化函数，它将用于构造表现当前连接状态的文本消息。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; OnWork响应：OnWord是TWorkEvent类事件的响应控制器。OnWork用于关联DoWork方法当缓冲区读写操作被调用时通知Indy组件和类。它一般被用于控制进度条和视窗元素的更新。AWorkMode表示当前操作的模式，其中：wmRead-组件正在读取数据；wmWrite-组件正在发送数据。AWorkCount指示当前操作的字节计数。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; OnWorkBegin响应：TWorkBeginEvent类。当缓冲区读写操作初始化时，该事件关联BeginWork方法用于通知Indy组件和类。它一般被用于控制进度条和视窗元素的更新。AWorkMode表示当前操作的模式，其中：wmRead-组件正在读取数据；wmWrite-组件正在发送数据。AWorkCountMax用于指示发送到OnWorkBegin事件的操作的最大字节数，0值代表未知。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; OnWorkEnd响应：TWorkEndEvent类。当缓冲区读写操作终止时，该事件关联EndWork方法用于通知Indy组件和类。AWorkMode表示当前操作的模式，其中：wmRead-组件正在读取数据；wmWrite-组件正在发送数据。AWorkCount表示操作的字节数。</p>
<p>在事件响应中，主要通过上述五种事件响应来控制程序。在一般情况下，在OnDisconnected中设定连接断开的界面通知；在OnStatus中设定当前操作的状态；在OnWork中实现传输中状态条和其他参数的显示；而在OnWorkBegin和OnWorkEnd中分别设定开始传输和传输结束时的界面。</p>
<p>（3）连接远程服务器</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 完成了设定控件属性和实现了控件的事件响应后，就可以与服务器进行交互和传输了。在连接之前，应首先判断IdFtp是否处于连接状态，如果Connected为False，则通过界面控件或其他方式指定与服务器连接相关的一些TCP类属性的设置，分别是：Host（主机名）:String、Username（用户名）:String、Password（密码）:String，也可以指定Port(端口)。之后调用Connect方法连接远程服务器，如果无异常出现则连接成功建立。</p>
<p>过程说明：procedure Connect(AAutoLogin: boolean; const ATimeout: Integer);</p>
<p>该过程连接远程FTP服务器</p>
<p>属性：AAutoLogin: boolean = True</p>
<p>连接后自动登录，该参数默认为True。</p>
<p>const ATimeout: Integer = IdTimeoutDefault</p>
<p>超时时间，单位：秒。</p>
<p>示例代码：</p>
<p>&nbsp;&nbsp; if IdFTP1.Connected then try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if TransferrignData then IdFTP1.Abort;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.Quit;</p>
<p>&nbsp;&nbsp; finally</p>
<p>&nbsp;&nbsp; end</p>
<p>&nbsp;&nbsp; else with IdFTP1 do try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Username := UserIDEdit.Text;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Password := PasswordEdit.Text;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Host := FtpServerEdit.Text;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Connect;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; ChangeDir(CurrentDirEdit.Text);</p>
<p>&nbsp;&nbsp; finally</p>
<p>&nbsp;&nbsp; end;</p>
<p>（4）改变目录</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 连接建立后，可以改变当前FTP会话所在的目录。对于已知绝对路径的情况下，可以直接调用ChangeDir(const ADirName: string)方法来转换目录，ADirName表示服务器上的文件系统目录，另外还可以调用ChangeDirUp回到上级目录。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 如果未知路径，则可以通过List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean)过程获取远程服务器的当前目录结构，此时必须设定TransferType为ftASCII（ASCII模式），其中：ADest保存当前目录结构，可以在后续程序中调用该列表。另外可以通过RetrieveCurrentDir方法获取当前目录名。</p>
<p>过程说明：</p>
<p>procedure ChangeDir(const ADirName: string);</p>
<p>改变工作目录</p>
<p>属性</p>
<p>const ADirName: string</p>
<p>远程服务器的目录描述</p>
<p>说明：该过程实际上是实现了FTP CWD命令。</p>
<p>&#160;</p>
<p>procedure ChangeDirUp;</p>
<p>到上一级目录</p>
<p>&#160;</p>
<p>function RetrieveCurrentDir: string;</p>
<p>该函数返回当前目录名</p>
<p>&#160;</p>
<p>procedure List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean);</p>
<p>列出当前目录所有文件和子目录及其属性</p>
<p>参数：</p>
<p>ADest: TStrings</p>
<p>保存文件及子目录的返回结果</p>
<p>const ASpecifier: string = </p>
<p>文件掩码，用于列出符合条件的文件</p>
<p>const ADetails: boolean = true</p>
<p>包含文件和子目录属性</p>
<p>&#160;</p>
<p>property DirectoryListing: TIdFTPListItems;</p>
<p>返回文件及目录结构的列表</p>
<p>&#160;</p>
<p>示例代码：</p>
<p>&nbsp;&nbsp; LS := TStringList.Create;</p>
<p>&nbsp;&nbsp; try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.ChangeDir(DirName);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.TransferType := ftASCII;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; CurrentDirEdit.Text := IdFTP1.RetrieveCurrentDir;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; DirectoryListBox.Items.Clear;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.List(LS);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; DirectoryListBox.Items.Assign(LS);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if DirectoryListBox.Items.Count &gt; 0 then</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if AnsiPos(total, DirectoryListBox.Items[0]) &gt; 0 then DirectoryListBox.Items.Delete(0);</p>
<p>&nbsp;&nbsp; finally</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; LS.Free;</p>
<p>&nbsp;&nbsp; end;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>（5）下载的实现</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 在下载之前，必须查看DirectoryListing.Items[sCurrFile].ItemType是否为文件，如返回为ditDirectory则代表当前文件名为目录，不能下载，必须导向到文件才可。如为文件，则可以进行下载。在下载前，设定传输的类型为二进制文件，并且指定本地要保存的路径。通过调用Get方法，实现文件的下载。下载过程较慢，可以考虑将其放到线程中实现。</p>
<p>过程说明：</p>
<p>procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean); overload;</p>
<p>procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean; AResume: Boolean); overload;</p>
<p>从远程服务器上获取文件。</p>
<p>属性说明：</p>
<p>const ASourceFile: string</p>
<p>远程服务器上的源文件名</p>
<p>const ADestFile: string</p>
<p>保存到客户机上的文件名</p>
<p>const ACanOverwrite: boolean = false</p>
<p>重写同名文件</p>
<p>AResume: Boolean = false</p>
<p>是否进行断点续传</p>
<p>&#160;</p>
<p>示例代码：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SaveDialog1.FileName := Name;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if SaveDialog1.Execute then begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetFunctionButtons(false);</p>
<p>&#160;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.TransferType := ftBinary;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BytesToTransfer := IdFTP1.Size(Name);</p>
<p>&#160;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if FileExists(Name) then begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case MessageDlg(File aready exists. Do you want to resume the download operation?,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mtConfirmation, mbYesNoCancel, 0) of</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mrYes: begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BytesToTransfer := BytesToTransfer - FileSizeByName(Name);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.Get(Name, SaveDialog1.FileName, false, true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mrNo: begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.Get(Name, SaveDialog1.FileName, true);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mrCancel: begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.Get(Name, SaveDialog1.FileName, false);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p>&#160;</p>
<p>（6）上传的实现</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 上传的实现与下载类似，通过put方法即可。</p>
<p>过程说明：</p>
<p>procedure Put(const ASource: TStream; const ADestFile: string; const AAppend: boolean); overload;</p>
<p>procedure Put(const ASourceFile: string; const ADestFile: string; const AAppend: boolean); overload;</p>
<p>上传文件至服务器</p>
<p>属性说明：</p>
<p>const ASourceFile: string</p>
<p>将要被上传的文件</p>
<p>const ADestFile: string = </p>
<p>服务器上的目标文件名</p>
<p>const AAppend: boolean = false</p>
<p>是否继续上传</p>
<p>&#160;</p>
<p>代码示例：</p>
<p>&nbsp;&nbsp; if IdFTP1.Connected then begin</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if UploadOpenDialog1.Execute then try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.TransferType := ftBinary;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IdFTP1.Put(UploadOpenDialog1.FileName, ExtractFileName(UploadOpenDialog1.FileName));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //可以在此添加改变目录的代码;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; finally</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //完成清除工作</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; end;</p>
<p>&nbsp;&nbsp; end;</p>
<p>（7）删除的实现</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 删除文件使用Delete方法，该方法删除指定的文件，删除对象必须为文件。如果要删除目录则使用RemoveDir方法。</p>
<p>过程说明：</p>
<p>procedure Delete(const AFilename: string);</p>
<p>删除文件</p>
<p>procedure RemoveDir(const ADirName: string);</p>
<p>删除文件夹，根据不同的服务器删除文件夹有不同的要求。有些服务器不允许删除非空文件夹，程序员需要添加清空目录的代码。</p>
<p>上述两个过程的参数均为目标名称</p>
<p>代码示例：</p>
<p>&nbsp;&nbsp; if not IdFTP1.Connected then exit;</p>
<p>&nbsp;&nbsp; Name := IdFTP1.DirectoryListing.Items[iCurrSelect].FileName;</p>
<p>&nbsp;&nbsp; if IdFTP1.DirectoryListing.Items[iCurrSelect].ItemType = ditDirectory then try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; idftp1.RemoveDir(Name);</p>
<p>&nbsp;&nbsp; finally</p>
<p>&nbsp;&nbsp; end</p>
<p>&nbsp;&nbsp; else</p>
<p>&nbsp;&nbsp; try</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; idftp1.Delete(Name);</p>
<p>&nbsp;&nbsp; finally</p>
<p>&nbsp;&nbsp; end;</p>
<p>（8）后退的实现</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 后退在实际上是目录操作的一种，可以简单的改变当前目录为..来实现，也可以通过回到上级目录来实现。</p>
<p>（9）取消的实现</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 在IdFtp的传输过程中，可以随时使用abort方法取消当前操作。可以的OnWork事件的实现中来确定何时取消操作。</p>
<p>代码示例：</p>
<p>//取消按钮的OnClick响应</p>
<p>procedure TMainForm.AbortButtonClick(Sender: TObject);</p>
<p>begin</p>
<p>&nbsp;&nbsp; AbortTransfer := true;</p>
<p>end;</p>
<p>//IdFTP的OnWork事件响应</p>
<p>procedure TMainForm.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;</p>
<p>&nbsp;&nbsp; const AWorkCount: Integer);</p>
<p>begin</p>
<p>&nbsp;&nbsp; ... </p>
<p>&nbsp;&nbsp; if AbortTransfer then IdFTP1.Abort;</p>
<p>&nbsp;&nbsp; AbortTransfer := false;</p>
<p>end;</p>
<p>（10）断点续传的实现</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 断点续传就是在上传或下载过程开始时，判断已经传输过的文件是否上传输完毕，如果传输没有成功完成，则在上次中断处继续进行传输工作。实现该功能需要两个重要的操作，首先是判断文件的大小信息，其次是在传输过程Get和Put中指定上传的行为。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 判断服务器上文件的大小使用函数Size(FileName)。在下载过程中，比较本地文件和远程文件的信息，然后在Get中指定AResume := True即可。而上传也一样，指定Put的AAppend := True就可以了。&nbsp;&nbsp;&nbsp;</p>
<p>&#160;</p>
<p>在前面我们讲过，Indy的网络操作大部分是阻塞模式的，TIdFtp也不例外。这样在上述各个操作运行过程的时候用户界面被暂时冻结，必须要等待调用返回才能继续用户操作界面响应。所以在实际编程中，需要使用多线程的方式来保证户界面的响应。Windows系统可以使用CreateThread系统调用来创建线程，但是在使用的时候需要开发人员做很多额外的工作来保证线程的同步等问题。而Indy中也包含了实现多线程的控件TIdThreadComponent，相对比之下该控件实现多线程时更加方便，也更容易控制。我将在后续的文章里为大家介绍TIdThreadCOmponent的使用方法。</p>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/53522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-01-06 01:54 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>得到网页源代码方法两种</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53518.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Mon, 05 Jan 2009 16:15:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53518.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/53518.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53518.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/53518.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/53518.html</trackback:ping><description><![CDATA[第一种方法:<br>我们用Twebbrowser来得到<br>新建application,加入memo,button,webbrowser三个组件<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>webbrowser1.Navigate('www.baidu.com');<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>vv:olevariant;<br>s:string;<br>begin<br>memo1.Lines.Clear;<br>vv:=webbrowser1.Document;<br>s:=vv.all.item(0).outerhtml;<br>memo1.Lines.Add(s);<br>end;<br>这样就会在memo中得到百度所有的代码了<br>s:=vv.all.item(0).outerhtml;<br>在这句中,请使用item(0)<br>如果你在面度中输入111,再点下'百度一下',会出现很多关于'111'的内容,这时你使用<br>s:=vv.all.item(0).outerhtml;<br>memo1.Lines.Add(s);<br>memo1中不会出现真正网页的源码了,些时只要改一点:item(1)就可以了<br><br><br><br><br><br><br>第二种方法:<br>我们使用Tidhttp来得到<br>var<br>s:string;<br><br>s:=idhttp1.get(url);//URL必须带有HTTP：//<br>而webbrowser可以是<a href="http://www.***.com/">www.***.com</a>或***.com<br><br>这也是我使用idhttp1.get(url)出错的原因<br><br>还有一点s:=idhttp1.get('<a href="http://www.baidu.com'/">http://www.baidu.com'</a>);还是出错，不知道为什么百度不可以<br>等待高手解释
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/53518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-01-06 00:15 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/01/06/53518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实例:手机号查寻工具</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/01/05/53517.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Mon, 05 Jan 2009 15:12:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/01/05/53517.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/53517.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/01/05/53517.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/53517.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/53517.html</trackback:ping><description><![CDATA[<p>从例子中你学到的知识比你学书本更容易记忆<br><br>现在做一个手机号查询工具,他是利用<a href="http://www.ip138.com/">www.ip138.com</a>来查的<br>主要用到webbrowser<br>利用pos()从源码中找出你想要的数据<br>还有一点,有些控件我没有办法去隐藏,只能用别有一些控件来覆盖起来,从而程序看起来美观<br>一会我发出代码,但希望你一看就懂,不懂的在提出问题来,我在第一时间回答你的问题<br>下载这个程序源码:<br><a href="http://www.cnitblog.com/Files/shuyezi122/手机号查寻工具.rar">http://www.cnitblog.com/Files/shuyezi122/手机号查寻工具.rar</a><br><br>发出主要代码:<br>unit Unit1;</p>
<p>interface</p>
<p>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, mshtml, StdCtrls, Buttons, OleCtrls, SHDocVw, ExtCtrls, Mask;</p>
<p>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp;&nbsp;&nbsp; WebBrowser1: TWebBrowser;<br>&nbsp;&nbsp;&nbsp; PostEdit: TBitBtn;<br>&nbsp;&nbsp;&nbsp; PostStr: TEdit;<br>&nbsp;&nbsp;&nbsp; Label1: TLabel;<br>&nbsp;&nbsp;&nbsp; Button1: TButton;<br>&nbsp;&nbsp;&nbsp; Edit1: TEdit;<br>&nbsp;&nbsp;&nbsp; Edit2: TEdit;<br>&nbsp;&nbsp;&nbsp; Edit3: TEdit;<br>&nbsp;&nbsp;&nbsp; Edit5: TEdit;<br>&nbsp;&nbsp;&nbsp; Edit4: TEdit;<br>&nbsp;&nbsp;&nbsp; Edit6: TEdit;<br>&nbsp;&nbsp;&nbsp; zhang: TEdit;<br>&nbsp;&nbsp;&nbsp; Image1: TImage;<br>&nbsp;&nbsp;&nbsp; procedure HandPostButClick(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure PostEditMouseDown(Sender: TObject; Button: TMouseButton;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shift: TShiftState; X, Y: Integer);<br>&nbsp;&nbsp;&nbsp; procedure WebBrowser1NavigateComplete2(Sender: TObject;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const pDisp: IDispatch; var URL: OleVariant);<br>&nbsp;&nbsp;&nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure WebBrowser1DownloadComplete(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure PostStrKeyPress(Sender: TObject; var Key: Char);<br>&nbsp;&nbsp;&nbsp; procedure PostEditClick(Sender: TObject);<br>&nbsp; private<br>&nbsp;&nbsp;&nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp;&nbsp;&nbsp; { Public declarations }<br>&nbsp; end;</p>
<p>var<br>&nbsp; Form1: TForm1;<br>&nbsp; myitem:Olevariant;</p>
<p>implementation</p>
<p>{$R *.dfm}<br>procedure TForm1.HandPostButClick(Sender: TObject);</p>
<p>begin <br>&nbsp; WebBrowser1.Navigate('http://www.ip138.com:8080/search.asp');<br>&nbsp;end;<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>webbrowser1.Navigate('http://www.ip138.com:8080/search.asp');<br>end;</p>
<p>procedure TForm1.PostEditMouseDown(Sender: TObject; Button: TMouseButton;<br>&nbsp; Shift: TShiftState; X, Y: Integer);<br>var<br>&nbsp;&nbsp;&nbsp; i:integer;<br>begin<br>&nbsp;&nbsp;&nbsp; myitem := WebBrowser1.Document;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for i := 0 to myitem.all.length - 1 do<br>begin<br>&nbsp; if myitem.all.item(i).tagName = 'INPUT' then<br>begin<br>&nbsp;&nbsp; if Uppercase(myitem.all.item(i).name)='MOBILE' then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myitem.all.item(i).value:=PostStr.Text;<br>end;<br>end;</p>
<p>&nbsp;&nbsp;&nbsp; for i := 0 to myitem.all.length - 1 do<br>&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if myitem.all.item(i).tagName = 'INPUT' then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Uppercase(myitem.all.item(i).type)='SUBMIT' then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if Uppercase(myitem.all.item(i).value)='查 询' then&nbsp; myitem.all.item(i).click;&nbsp; // 点击提交键<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>&nbsp;&nbsp;&nbsp; end;<br>end;</p>
<p>procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;<br>&nbsp; const pDisp: IDispatch; var URL: OleVariant);</p>
<p>begin<br>&nbsp;&nbsp;&nbsp; myitem := WebBrowser1.Document;<br>end;</p>
<p>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp;&nbsp; s,IPSTR , IPSTR1 : String;<br>&nbsp;&nbsp; iPos,i : Integer;<br>begin<br>&nbsp;edit1.Text:=poststr.Text;<br>&nbsp;IPSTR:=myitem.all.item(1).outerhtml;</p>
<p>&nbsp;iPos := Pos('卡号归属地',IPSTR);<br>&nbsp;if iPos &lt;&gt; 0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edit2.Text:= Copy(IPSTR,iPos+53,4);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edit6.Text:= Copy(IPSTR,iPos+63,4);</p>
<p>&nbsp;iPos := Pos('卡&amp;nbsp;类&amp;nbsp;型',IPSTR);<br>&nbsp;if iPos &lt;&gt; 0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edit3.Text:= Copy(IPSTR,iPos+61,9);</p>
<p>&nbsp;iPos := Pos('区 号',IPSTR);<br>&nbsp;if iPos &lt;&gt; 0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zhang.Text:=Copy(IPSTR,iPos+40,4);<br>&nbsp;&nbsp;&nbsp; if&nbsp; zhang.Text[4]&nbsp; in ['0'..'9'] then<br>&nbsp;&nbsp;&nbsp; edit4.text:=zhang.text<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;&nbsp;&nbsp; s:=zhang.Text;<br>&nbsp;&nbsp;&nbsp; setlength(s,3);<br>&nbsp;&nbsp;&nbsp; edit4.text:=s;<br>&nbsp;&nbsp;&nbsp; end;<br>&nbsp;iPos := Pos('邮 编',IPSTR);<br>&nbsp;if iPos &lt;&gt; 0 then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edit5.Text:= Copy(IPSTR,iPos+40,6);<br>end;</p>
<p>procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);<br>begin<br>postedit.Enabled:=true;<br>end;</p>
<p>procedure TForm1.PostStrKeyPress(Sender: TObject; var Key: Char);<br>begin<br>if not (key in ['0'..'9',#8]) then<br>begin<br>application.MessageBox('手机号只能是数字','提示',64);<br>key:=#0;<br>poststr.SetFocus;<br>end;<br>end;</p>
<p>procedure TForm1.PostEditClick(Sender: TObject);<br>begin<br>button1.Enabled:=true;<br>end;</p>
<p>end.<br></p>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/53517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-01-05 23:12 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/01/05/53517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webbrowser做网页浏览</title><link>http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53323.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Wed, 31 Dec 2008 15:29:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53323.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/53323.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/53323.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/53323.html</trackback:ping><description><![CDATA[<p>源码下载:<br><a href="http://www.cnitblog.com/Files/shuyezi122/webbrowser做网页浏览.rar">http://www.cnitblog.com/Files/shuyezi122/webbrowser做网页浏览.rar</a><br><br>下面是所有代码<br><br>unit Unit1;</p>
<p>interface</p>
<p>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, ComCtrls, ImgList, OleCtrls, SHDocVw, StdCtrls, ExtCtrls,<br>&nbsp; ToolWin;</p>
<p>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp;&nbsp;&nbsp; ToolBar1: TToolBar;<br>&nbsp;&nbsp;&nbsp; Panel1: TPanel;<br>&nbsp;&nbsp;&nbsp; Edit1: TEdit;<br>&nbsp;&nbsp;&nbsp; Button9: TButton;<br>&nbsp;&nbsp;&nbsp; WebBrowser1: TWebBrowser;<br>&nbsp;&nbsp;&nbsp; ImageList1: TImageList;<br>&nbsp;&nbsp;&nbsp; ToolButton1: TToolButton;<br>&nbsp;&nbsp;&nbsp; ToolButton2: TToolButton;<br>&nbsp;&nbsp;&nbsp; ToolButton4: TToolButton;<br>&nbsp;&nbsp;&nbsp; ToolButton5: TToolButton;<br>&nbsp;&nbsp;&nbsp; ToolButton6: TToolButton;<br>&nbsp;&nbsp;&nbsp; ToolButton8: TToolButton;<br>&nbsp;&nbsp;&nbsp; ToolButton9: TToolButton;<br>&nbsp;&nbsp;&nbsp; ToolButton3: TToolButton;<br>&nbsp;&nbsp;&nbsp; Label1: TLabel;<br>&nbsp;&nbsp;&nbsp; StatusBar1: TStatusBar;<br>&nbsp;&nbsp;&nbsp; Timer1: TTimer;<br>&nbsp;&nbsp;&nbsp; procedure ToolButton8Click(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure Button9Click(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure ToolButton1Click(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure ToolButton4Click(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure ToolButton5Click(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure ToolButton6Click(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure WebBrowser1DownloadBegin(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure WebBrowser1DownloadComplete(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var Cancel: WordBool);<br>&nbsp;&nbsp;&nbsp; procedure WebBrowser1StatusTextChange(Sender: TObject;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const Text: WideString);<br>&nbsp;&nbsp;&nbsp; procedure Timer1Timer(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp;&nbsp;&nbsp; procedure ToolButton2Click(Sender: TObject);<br>&nbsp; private<br>&nbsp;&nbsp;&nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp;&nbsp;&nbsp; { Public declarations }<br>&nbsp; end;</p>
<p>var<br>&nbsp; Form1: TForm1;<br>&nbsp; nurl:string;</p>
<p>implementation</p>
<p>{$R *.dfm}</p>
<p>procedure TForm1.ToolButton8Click(Sender: TObject);<br>begin<br>close;<br>end;</p>
<p>procedure TForm1.Button9Click(Sender: TObject);<br>begin<br>webbrowser1.Navigate(edit1.Text);\\打开网页<br>end;</p>
<p>procedure TForm1.ToolButton1Click(Sender: TObject);<br>begin<br>try<br>webbrowser1.GoBack;\\返回<br>except<br>showmessage('没有记录了');<br>exit;<br>end;<br>end;</p>
<p>procedure TForm1.ToolButton4Click(Sender: TObject);<br>begin<br>webbrowser1.Stop;\\停止<br>end;</p>
<p>procedure TForm1.ToolButton5Click(Sender: TObject);<br>begin<br>webbrowser1.Refresh;\\刷新<br>end;</p>
<p>procedure TForm1.ToolButton6Click(Sender: TObject);<br>begin<br>webbrowser1.GoHome;<br>end;</p>
<p>procedure TForm1.WebBrowser1DownloadBegin(Sender: TObject);<br>begin<br>statusbar1.Panels[0].Text:='正在打开'+edit1.Text;<br>end;</p>
<p>procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject);<br>begin<br>statusbar1.Panels[0].Text:='完毕';<br>end;</p>
<p>procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;<br>&nbsp; var ppDisp: IDispatch; var Cancel: WordBool);<br>begin<br>Cancel:=true;<br>WebBrowser1.Navigate (nurl);\\在你自己应用程序中打开网页超连接,nurl来自下面<br>end;</p>
<p>procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;<br>&nbsp; const Text: WideString);<br>begin<br>nurl:=text;\\得到连接地址,给上面函数用<br>end;</p>
<p>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br>statusbar1.Panels[1].Text:=timetostr(now);<br>end;</p>
<p>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>statusbar1.Panels[2].Text:='元旦快乐';\\今天元旦,送自己的礼物<br>end;</p>
<p>procedure TForm1.ToolButton2Click(Sender: TObject);<br>begin<br>try<br>webbrowser1.GoForward ;<br>except<br>&nbsp;showmessage('没有记录了');<br>exit;<br>end;<br>end;<br>end.<br></p>
<p><br><br><br><br><br><br>得到webbrowser内网页源码<br>var<br>myitem:Olevariant;<br>begin<br>&nbsp;&nbsp;&nbsp; myitem := WebBrowser1.Document;<br>&nbsp;&nbsp;&nbsp; memo1.Lines.add(myitem.all.item(0).outerhtml);<br>end;<br>&nbsp;</p>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/53323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2008-12-31 23:29 <a href="http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>idicmpclient实现ping命令</title><link>http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53311.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Wed, 31 Dec 2008 11:48:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53311.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/53311.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53311.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/53311.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/53311.html</trackback:ping><description><![CDATA[ping是发送很小的包去你指定的地址,返回快<br>加上:edit,button,listbox,idicmpclient四个<br><br><br>双击button<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>i:integer;<br>begin<br>idicmpclient.Host:=edit1.Text;<br>for i:=0 to 3 do<br>begin<br>idicmpclient.Ping;<br>application.ProcessMessages;<br>&nbsp;sleep(1000);<br>end;<br>end;<br><br>在idicmpclient事件的onreply中加代码<br>procedure TForm1.idicmpclientReply(ASender: TComponent;<br>&nbsp; const <span style="COLOR: red">AReplyStatus: TReplyStatus</span>);<br>var<br>stime:string;<br>begin<br>stime:='=';<br>listbox1.Items.Add(format('Reply from&nbsp;&nbsp; %s:&nbsp; time=%dms&nbsp;&nbsp; TTL=%d ms',<br>[aReplyStatus.fromipaddress,\\ping的IP地址<br>&nbsp;aReplyStatus.sequenceid div 100,\\整除100是为了显示MS(毫秒)<br>&nbsp;aReplyStatus.timetolive,\\生命周期<br>&nbsp;stime,<br>&nbsp;aReplyStatus.msroundtriptime]));\\不知道是什么<br>end;<br><br>&nbsp;<span style="COLOR: red">AReplyStatus: TReplyStatus<br>有好心人请帮我讲一下它的方法属性<br>在这里先说谢谢了<br><br></span>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/53311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2008-12-31 19:48 <a href="http://www.cnitblog.com/shuyezi122/archive/2008/12/31/53311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>