亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? webshower.pas

?? DELPHI 訪問.net的WEB SERVICE的例子
?? PAS
字號:
{***************************************************************
 *
 * Project Name: XJGTest -- WebShower
 * Typist:       XJG(xianjun@163.net)
 * Purpose:      手工載入數據到WebBrowser
 *               http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/pluggable/pluggable.asp
 * Comment Time: 2003-5-3 11:54:50
 * History:      Create by xjg. 2003-5-3 11:54:50
 *
 ****************************************************************}

unit WebShower;

interface

uses
  Classes, Windows, SysUtils, ActiveX, UrlMon;

type
  TGetStreamEvent = procedure(const AUrl, AFile: string; const AStream: TMemoryStream;
    var AHandled: Boolean) of object;
  TWebShower = class(TComponent, IInternetProtocol)
  private
    { Private declarations }
    Factory: IClassFactory;
    InternetSession: IInternetSession;
    FNameSpace: string;
    FActive: Boolean;
    FOnGetStream: TGetStreamEvent;
    procedure SetNameSpace(const Value: string);
    procedure SetActive(const Value: Boolean);
  private
    FUrl: string;
    Written, TotalSize: Integer;
    ProtSink: IInternetProtocolSink;
    DataStream: IStream;
    function GetDataStream(var DataStream: IStream): Integer;
  protected
    // IInternetProtocol Methods
    function Start(szUrl: PWideChar; OIProtSink: IInternetProtocolSink;
      OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): HRESULT; stdcall;
    function Continue(const ProtocolData: TProtocolData): HRESULT; stdcall;
    function Abort(hrReason: HRESULT; dwOptions: DWORD): HRESULT; stdcall;
    function Terminate(dwOptions: DWORD): HRESULT; stdcall;
    function Suspend: HRESULT; stdcall;
    function Resume: HRESULT; stdcall;
    function Read(pv: Pointer; cb: ULONG; out cbRead: ULONG): HRESULT; stdcall;
    function Seek(dlibMove: LARGE_INTEGER; dwOrigin: DWORD;
      out libNewPosition: ULARGE_INTEGER): HRESULT; stdcall;
    function LockRequest(dwOptions: DWORD): HRESULT; stdcall;
    function UnlockRequest: HRESULT; stdcall;
  protected
    procedure GetWebContent(const AUrl, AFile: string; const AStream: TMemoryStream); virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
  published
    property Active: Boolean read FActive write SetActive;
    property NameSpace: string read FNameSpace write SetNameSpace;
    property OnGetStream: TGetStreamEvent read FOnGetStream write FOnGetStream;
  end;

  TWebShowerClass = class of TWebShower;

var
  G_WSClass: TWebShowerClass = TWebShower;

implementation

uses
  AxCtrls, ComObj, ComServ;

const
  IID_NSHandler: TGUID = '{A562A5BC-F3C8-4968-8FA8-996B45223990}';

var
  G_WebShower: TWebShower;

type
  TNSHandler = class(TComObject, IInternetProtocol)
  private
    FWebShower: TWebShower;
  protected
    // IInternetProtocol Methods
    function Start(szUrl: PWideChar; OIProtSink: IInternetProtocolSink;
      OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): HRESULT; stdcall;
    function Continue(const ProtocolData: TProtocolData): HRESULT; stdcall;
    function Abort(hrReason: HRESULT; dwOptions: DWORD): HRESULT; stdcall;
    function Terminate(dwOptions: DWORD): HRESULT; stdcall;
    function Suspend: HRESULT; stdcall;
    function Resume: HRESULT; stdcall;
    function Read(pv: Pointer; cb: ULONG; out cbRead: ULONG): HRESULT; stdcall;
    function Seek(dlibMove: LARGE_INTEGER; dwOrigin: DWORD;
      out libNewPosition: ULARGE_INTEGER): HRESULT; stdcall;
    function LockRequest(dwOptions: DWORD): HRESULT; stdcall;
    function UnlockRequest: HRESULT; stdcall;
  public
    destructor Destroy; override;
    procedure Initialize; override;
  end;

  { TNSHandler }

function TNSHandler.Start(szUrl: PWideChar; OIProtSink: IInternetProtocolSink;
  OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): HRESULT; stdcall;
begin
  Result := FWebShower.Start(szUrl, OIProtSink, OIBindInfo, grfPI, dwReserved);
end;

function TNSHandler.Read(pv: Pointer; cb: ULONG; out cbRead: ULONG): HRESULT;
begin
  Result := FWebShower.Read(pv, cb, cbRead);
end;

function TNSHandler.Terminate(dwOptions: DWORD): HRESULT; stdcall;
begin
  Result := FWebShower.Terminate(dwOptions);
end;

function TNSHandler.LockRequest(dwOptions: DWORD): HRESULT; stdcall;
begin
  Result := FWebShower.LockRequest(dwOptions);
end;

function TNSHandler.UnlockRequest: HRESULT;
begin
  Result := FWebShower.UnlockRequest;
end;

function TNSHandler.Continue(const ProtocolData: TProtocolData): HRESULT;
begin
  Result := FWebShower.Continue(ProtocolData);
end;

function TNSHandler.Abort(hrReason: HRESULT; dwOptions: DWORD): HRESULT; stdcall;
begin
  Result := FWebShower.Abort(hrReason, dwOptions);
end;

function TNSHandler.Suspend: HRESULT; stdcall;
begin
  Result := FWebShower.Suspend;
end;

function TNSHandler.Resume: HRESULT; stdcall;
begin
  Result := FWebShower.Resume;
end;

function TNSHandler.Seek(dlibMove: LARGE_INTEGER; dwOrigin: DWORD;
  out libNewPosition: ULARGE_INTEGER): HRESULT;
begin
  Result := FWebShower.Seek(dlibMove, dwOrigin, libNewPosition);
end;

destructor TNSHandler.Destroy;
begin
  FWebShower.Free;
  inherited;
end;

procedure TNSHandler.Initialize;
begin
  inherited;
  FWebShower := G_WSClass.Create(nil);
  FWebShower.Assign(G_WebShower);
end;

{ TWebShower }

function TWebShower.Abort(hrReason: HRESULT; dwOptions: DWORD): HRESULT;
begin
  Result := E_NOTIMPL;
end;

procedure TWebShower.Assign(Source: TPersistent);
begin
  if Source is TWebShower then
  begin
    with TWebShower(Source) do
    begin
      Self.NameSpace := NameSpace;
      Self.OnGetStream := OnGetStream;
    end;
  end
  else
    inherited;
end;

function TWebShower.Continue(const ProtocolData: TProtocolData): HRESULT;
begin
  Result := S_OK;
end;

constructor TWebShower.Create(AOwner: TComponent);
begin
  inherited;
  FNameSpace := 'test';
  if G_WebShower = nil then
    G_WebShower := Self;
end;

destructor TWebShower.Destroy;
begin
  if Active then
    Active := False;
  if G_WebShower = Self then
    G_WebShower := nil;
  inherited;
end;

function TWebShower.GetDataStream(var DataStream: IStream): Integer;
var
  F: TMemoryStream;
  Dummy: Int64;
  AFileName, AErrorMsg: string;
  AHandled: Boolean;
begin
  F := TMemoryStream.Create;
  try
    try
      AFileName := Copy(FUrl, Pos(FNameSpace, FUrl) + Length(FNameSpace) + 1, Length(FUrl));
      AHandled := False;
      if Assigned(FOnGetStream) then
        FOnGetStream(FUrl, AFileName, F, AHandled);
      if not AHandled then
        GetWebContent(FUrl, AFileName, F);
    except
      on E: Exception do
      begin
        AErrorMsg := Format('<html><body><font style="font-size:11pt;color:red;bold">%s</font></body></html>',
          [E.Message]);
        F.Size := Length(AErrorMsg);
        Move(Pointer(AErrorMsg)^, F.Memory^, F.Size);
      end;
    end;
    CreateStreamOnHGlobal(0, True, DataStream);
    F.Position := 0;
    TOleStream.Create(DataStream).CopyFrom(F, F.Size);
    DataStream.Seek(0, STREAM_SEEK_SET, Dummy);
    Result := F.Size;
  finally
    F.Free;
  end;
end;

procedure TWebShower.GetWebContent(const AUrl, AFile: string;
  const AStream: TMemoryStream);
begin
  //
end;

function TWebShower.LockRequest(dwOptions: DWORD): HRESULT;
begin
  Result := S_OK;
end;

function TWebShower.Read(pv: Pointer; cb: ULONG;
  out cbRead: ULONG): HRESULT;
begin
  if (totalSize = 0) or (DataStream = nil) then
  begin
    Result := S_FALSE;
    Exit;
  end;
  {Read Data from DataStream to Browser/URLMON }
  DataStream.Read(pv, cb, @cbRead);
  Inc(written, cbRead);
  if (written = totalSize) then
    Result := S_FALSE
  else
    Result := HRESULT(E_PENDING);
end;

function TWebShower.Resume: HRESULT;
begin
  Result := E_NOTIMPL;
end;

function TWebShower.Seek(dlibMove: LARGE_INTEGER; dwOrigin: DWORD;
  out libNewPosition: ULARGE_INTEGER): HRESULT;
begin
  Result := E_NOTIMPL;
end;

procedure TWebShower.SetActive(const Value: Boolean);
begin
  if FActive <> Value then
  begin
    if Value then
    begin
      CoGetClassObject(IID_NSHandler, CLSCTX_SERVER, nil, IClassFactory, Factory);
      CoInternetGetSession(0, InternetSession, 0);
      InternetSession.RegisterNameSpace(Factory, IID_NSHandler, 'http', 0, nil, 0);
    end
    else
      InternetSession.UnregisterNameSpace(Factory, 'http');
    FActive := Value;
  end;
end;

procedure TWebShower.SetNameSpace(const Value: string);
begin
  FNameSpace := Value;
end;

function TWebShower.Start(szUrl: PWideChar;
  OIProtSink: IInternetProtocolSink; OIBindInfo: IInternetBindInfo; grfPI,
  dwReserved: DWORD): HRESULT;
begin
  if Pos(Format('http://%s/', [LowerCase(FNameSpace)]), szUrl) <> 1 then
    Result := INET_E_USE_DEFAULT_PROTOCOLHANDLER
  else
  begin
    FUrl := SzUrl;
    written := 0;
    ProtSink := OIProtSink; //Get interface to Transaction handlers IInternetnetProtocolSink
    { Now get the data and load it in DataStream }
    TotalSize := GetDataStream(DataStream);
    {Inform Transaction handler that all data is ready }
    ProtSink.ReportData(BSCF_FIRSTDATANOTIFICATION or
      BSCF_LASTDATANOTIFICATION or BSCF_DATAFULLYAVAILABLE, TotalSize, TotalSize);
    { -> Here our Read Method is called by transaction handler}
    ProtSink.ReportResult(S_OK, S_OK, nil);
    { Report result to transaction handler. Our Terminate method will be called }
    Result := S_OK;
  end;
end;

function TWebShower.Suspend: HRESULT;
begin
  Result := E_NOTIMPL;
end;

function TWebShower.Terminate(dwOptions: DWORD): HRESULT;
begin
  if Assigned(DataStream) then
    DataStream._Release;
  if Assigned(Protsink) then
    Protsink._Release;
  Result := S_OK;
end;

function TWebShower.UnlockRequest: HRESULT;
begin
  Result := S_OK;
end;

initialization
  TComObjectFactory.Create(ComServer, TNSHandler, IID_NSHandler,
    'NSHandler', 'NSHandler', ciMultiInstance, tmApartment);

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品在线视频| 欧美性猛片aaaaaaa做受| 成人免费在线播放视频| 91蝌蚪porny| 免费成人小视频| 国产精品嫩草99a| 8v天堂国产在线一区二区| 国产精品影视在线观看| 有坂深雪av一区二区精品| 欧美大黄免费观看| 99久久精品一区二区| 麻豆91在线看| 欧美日韩在线亚洲一区蜜芽| 久久草av在线| 一区二区三区 在线观看视频| 欧美成人欧美edvon| 一本一道综合狠狠老| 日本中文字幕不卡| 一区在线观看视频| 日韩一区二区三区免费看| av资源网一区| 国产精品资源在线| 午夜在线成人av| 久久精品这里都是精品| 欧美日韩免费不卡视频一区二区三区 | 国产在线精品视频| 亚洲一区二区成人在线观看| 国产精品免费久久| 精品久久久久一区二区国产| 91麻豆精品国产| 在线视频欧美精品| 99九九99九九九视频精品| 日本三级亚洲精品| 亚洲成av人影院| 亚洲日本护士毛茸茸| 亚洲国产岛国毛片在线| 精品国产一区二区三区av性色| 在线观看中文字幕不卡| 高潮精品一区videoshd| 国产一区二区调教| 免费美女久久99| 污片在线观看一区二区| 一区二区成人在线视频| 日韩伦理av电影| 精品国产乱子伦一区| 日韩欧美激情一区| 欧美色精品天天在线观看视频| 91在线视频免费观看| jiyouzz国产精品久久| 国产黄色成人av| 久久国产精品色| 精品一区二区日韩| 日本欧美久久久久免费播放网| 亚洲电影第三页| 亚洲大型综合色站| 日日摸夜夜添夜夜添国产精品 | 成人毛片在线观看| 国内外精品视频| 国内不卡的二区三区中文字幕| 国产自产高清不卡| 国产成人免费xxxxxxxx| 成人午夜视频在线| av一二三不卡影片| 99精品欧美一区二区蜜桃免费| 成人av影视在线观看| 99精品黄色片免费大全| 日本道精品一区二区三区| 日本精品一区二区三区高清| 欧美最猛黑人xxxxx猛交| 91在线云播放| 欧美中文字幕一区二区三区亚洲| 精品视频在线免费观看| 欧美一区二区三区在线看| 日韩一级片在线观看| 91精品黄色片免费大全| 精品毛片乱码1区2区3区| 国产亚洲婷婷免费| 亚洲精品欧美激情| 日本欧美一区二区三区| 国产精品99久久久久| 成人不卡免费av| 欧美日韩视频专区在线播放| 日韩精品一区二区三区蜜臀| 国产午夜亚洲精品不卡| 一区二区三区精品在线| 首页综合国产亚洲丝袜| 国产真实乱子伦精品视频| 成人激情动漫在线观看| 在线观看网站黄不卡| 日韩一二三四区| 国产精品伦理一区二区| 一区二区三区四区在线免费观看 | 99精品在线观看视频| 欧美高清性hdvideosex| 亚洲精品一区二区三区福利| 亚洲欧美中日韩| 亚洲欧洲制服丝袜| 麻豆传媒一区二区三区| 国产一区三区三区| 成人精品电影在线观看| 欧美久久久久久久久久| 国产欧美一区二区精品婷婷| 亚洲一本大道在线| 国产99久久久国产精品潘金| 在线视频欧美精品| 久久精品在线免费观看| 日日骚欧美日韩| 99综合电影在线视频| 欧美日韩高清一区二区| 亚洲国产精品高清| 午夜欧美一区二区三区在线播放| 国产69精品久久久久777| 日韩欧美成人一区二区| 亚州成人在线电影| 欧美日韩一区二区三区免费看 | 欧美日韩和欧美的一区二区| 亚洲另类中文字| 99精品国产99久久久久久白柏| 欧美国产日韩精品免费观看| 国产综合久久久久久久久久久久| 日韩一区二区三区视频在线 | 欧美一区二区精品在线| 亚洲成在线观看| 欧美丝袜丝交足nylons图片| 成人免费在线视频| 成人99免费视频| 国产精品久久久久影院| 不卡av免费在线观看| 国产精品久线观看视频| eeuss鲁片一区二区三区在线看| 欧美国产日韩亚洲一区| 成人免费毛片片v| 国产精品久久久久久亚洲毛片 | 亚洲一区在线视频| 欧美视频自拍偷拍| 免费成人av在线| 日韩一二三区视频| 韩国v欧美v日本v亚洲v| 国产日韩精品一区二区三区| 顶级嫩模精品视频在线看| 国产亚洲美州欧州综合国| 国产成人午夜精品影院观看视频| 欧美国产成人精品| 91在线porny国产在线看| 亚洲欧美日韩综合aⅴ视频| 91成人在线观看喷潮| 亚洲成人动漫在线免费观看| 51午夜精品国产| 看电视剧不卡顿的网站| 国产亚洲一本大道中文在线| 成+人+亚洲+综合天堂| 亚洲精选视频在线| 7777精品伊人久久久大香线蕉完整版 | 91视频国产观看| 亚洲午夜电影网| 欧美大片顶级少妇| 成人av在线观| 亚洲成人av资源| 2023国产精品自拍| 97se亚洲国产综合自在线不卡| 亚洲夂夂婷婷色拍ww47| 日韩欧美国产精品一区| 国产福利精品一区| 一区二区理论电影在线观看| 欧美一级专区免费大片| 成人小视频在线| 亚洲成a人v欧美综合天堂 | 欧美电影免费观看高清完整版在线| 国产综合久久久久久鬼色| 亚洲三级免费电影| 欧美一级日韩免费不卡| 欧美一级日韩免费不卡| 高清在线观看日韩| 亚洲 欧美综合在线网络| 久久久久久麻豆| 91传媒视频在线播放| 久久se精品一区精品二区| 综合色天天鬼久久鬼色| 91精选在线观看| 99国产欧美久久久精品| 美女视频黄免费的久久| 亚洲另类中文字| 久久老女人爱爱| 欧美美女一区二区在线观看| 成人激情动漫在线观看| 日本伊人午夜精品| 日韩美女视频19| 精品久久人人做人人爽| 欧美日韩一区高清| av日韩在线网站| 韩国成人精品a∨在线观看| 亚洲国产成人tv| 中文字幕亚洲一区二区va在线| 欧美精选午夜久久久乱码6080| 波波电影院一区二区三区| 韩国女主播一区二区三区| 午夜电影久久久| 一区二区三区在线影院| 国产香蕉久久精品综合网| 日韩欧美精品三级|