附录六
部分源代码
1、浏览
    完成浏览器必需的浏览功能。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CWin.h"
#include <Filectrl.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
//设置浏览器起始页面
//空白页
TVariant *starturl=new TVariant(CppWebBrowser1->Path+"blank") ;
CppWebBrowser1->Navigate2(starturl) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender,
      LPDISPATCH pDisp, TVariant *URL, TVariant *Flags,
      TVariant *TargetFrameName, TVariant *PostData, TVariant *Headers,
      TOLEBOOL *Cancel)
{
//修改地址栏为当前页面网址
  AddrBar->Text = *URL ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StartBrowseClick(TObject *Sender)
{
//按钮 go ;浏览
//鼠标点击按钮,开始浏览地址栏中请求网页
//默认,回车键
TVariant *url=new TVariant(AddrBar->Text);
CppWebBrowser1->Navigate2(url) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::stopClick(TObject *Sender)
{
//按钮 stop ;停止
//鼠标点击按钮,停止当前浏览请求
CppWebBrowser1->Stop();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::refreshClick(TObject *Sender)
{
//按钮 refresh ;刷新
//鼠标点击按钮,刷新当前显示页面
CppWebBrowser1->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::backClick(TObject *Sender)
{
//按钮 << ;后退
//鼠标点击按钮,访问历史链表中的后一网页
CppWebBrowser1->GoBack();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::forwardClick(TObject *Sender)
{
//按钮 >> ;前进
//鼠标点击按钮,访问历史链表中的前一网页
CppWebBrowser1->GoForward();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::homeClick(TObject *Sender)
{
//按钮 home ;主页
//鼠标点击按钮,显示IE默认主页
CppWebBrowser1->GoHome();
}
//---------------------------------------------------------------------------
2、Http请求消息类
Http请求消息的分析和构造。
    下面的代码实现了类中基本功能——获取请求消息,并分析其url。
//---------------------------------------------------------------------------
  AnsiString req ;    //http-request;请求消息
  AnsiString reqA ;  //request address;请求文件对象url
  int spos = 0 ;      //临时变量
//从服务器端口获取请求消息的报文
  req = Socket->ReceiveText() ;
免费分享源码的网址//从报文中分离出请求的url
  reqA = req ;
  spos = req.Pos(" ") ;
  spos++ ;
  reqA = req.SubString(spos,req.Length()-spos) ;
  spos = reqA.Pos(" ") ;
  spos-- ;
  reqA = reqA.SubString(1,spos) ;
//---------------------------------------------------------------------------
3、Http响应消息类
    Http响应消息的分析和构造。
    下面的代码实现了类中基本功能——获取,构造完整的响应消息,并发送。
//---------------------------------------------------------------------------
AnsiString reqA ;  //request address;请求文件对象url
AnsiString rep,reph,repb ;
//http-response ;响应消息包 = 头 + 体
//response head ;响应消息包头
//response body ;响应消息文件体
//从Web上获取响应消息
TNMHTTP *HTTP1 = new TNMHTTP(0);
HTTP1->Get(reqA) ;
reph = HTTP1->Header ;
repb = HTTP1->Body ;
free (HTTP1) ;
rep = reph + repb ;
//向浏览器发送响应消息
Socket->SendText(rep) ;
//---------------------------------------------------------------------------
4、缓存文件类
    与硬盘缓存目录、文件相关的创建和读写操作。
下面的代码实现了类中基本功能——硬盘缓存目录、文件相关的创建和读写操作
//---------------------------------------------------------------------------
AnsiString hDir,bDir ;  //缓存文件完整路径,h:信息头,b:文件
AnsiString hd,bd ;      //缓存文件完整目录,
int iFileHandle;    //文件句柄
int iFileLength;    //文件长度
int iBytesRead;      //文件读写字节数
char *Buffer;        //缓存
AnsiString reph,repb ;
//response head ;响应消息包头
//response body ;响应消息文件体
//目录获取、创建操作
hd = ExtractFileDir(hDir) ;
bd = ExtractFileDir(bDir) ;
if (!(DirectoryExists(hd)||DirectoryExists(bd)))
  {
    ForceDirectories(hd) ;
    ForceDirectories(bd) ;
  }
//缓存文件操作
if ( FileExists(hDir) )
  {  //将缓存中文件读出,准备传送给浏览器
      //当缓存中有浏览器请求的对象时
      iFileHandle = FileOpen(hDir, fmOpenRead);
      iFileLength = FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer = new char[iFileLength+1];

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。