国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
WebBrowser組件和MSHTML 在Delphi中的使用
由于項目需要,近來研究了一下WebBrowser組件和MSHTML 在Delphi中的使用,整理了一下這段時間研究的結(jié)果,寫下來一是方便大家查閱,二也可以加深我自己的記憶.希望能對大家有所幫助… …,同時,如果有更好的處理方式或者我沒有提到的問題,請大家也告訴我哦, 咱們一塊進步… ...,其中一部分是我從網(wǎng)絡(luò)中搜集的資料,謝謝那些兄弟們… …
MSHTML把HTML頁面中的元素封裝成了IHTMLInputElement、 IHTMLInputButtonElement、IHTMLInputTextElement、IHTMLTextAreaElement、IHTMLTitleElement、IHTMLFormElement等等組件接口。
在程序中可以通過MSHTML提供的IHTMLDocument2接口得到整個Document對象,IHTMLElementCollection接口得到所有頁面元素的集合,通過該接口的Item方法可以得到具體的某個組件,然后設(shè)置和讀取該組件的屬性值。
下面是一些常用功能的事例代碼.
1.  打開某個頁面:
     web.Navigate(ExtractFilePath(Application.ExeName) + ‘Template/login.html‘);
2.  取出頁面中某個HtmlElement的Value屬性值:
function GetValueByElementName(web: TWebBrowser; elementName: string; index: integer): string;
begin
    result := (((web.Document as IHTMLDocument2).body.all as
      IHTMLElementCollection).item(elementName, index) as IHTMLInputElement
    ).value
end;
3.  給HtmlElement設(shè)置Value屬性
procedure SetValueTextAreaName(web: TWebBrowser; elementName, value: string;index: integer);
begin
  (((web.Document as IHTMLDocument2).body.all as
    IHTMLElementCollection).item(elementName, index) as IHTMLTextAreaElement
  ).value := value;
end;
4.  判斷頁面執(zhí)行結(jié)果是否成功
因為Web應用中如果出錯的一般是采用錯誤頁面的方式呈現(xiàn)給最終用戶,所以我們也無法抓到Http錯誤,只能通過在webBeforeNavigate2事件中將URL參數(shù)記錄到全局變量中, 然后在webDocumentComplete事件中根據(jù)URL參數(shù)和全局變量中的URL參數(shù)來判斷執(zhí)行結(jié)果是否正確.當然,這樣需要將頁面地址編碼到代碼中,降低了靈活性,但是這也是我能想到的唯一的方法,如果大家有什么好的方法,請告訴我哦.
5.  屏蔽鼠標右鍵和某些快捷鍵
本功能需要在webBrowser的窗口中加入ApplicationEvents組件,設(shè)置它的OnMessage事件代碼如下即可.
procedure TwebAdapterForm.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
const
  _KeyPressMask = $80000000;
begin
//禁用右鍵
  with Msg do
  begin
    if not IsChild(web.Handle, hWnd) then Exit;
    Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);
  end;
  //禁止Ctrl + N
  //禁止Ctrl + F
  //禁止Ctrl + A
  if Msg.message = WM_KEYDOWN then
  begin
    if ((Msg.lParam and _KeyPressMask) = 0) and
       (GetKeyState(VK_Control) <0) and ((Msg.wParam = Ord(‘N‘))
          or (Msg.wParam = Ord(‘F‘)) or (Msg.wParam = Ord(‘A‘))) then
    begin
      Handled := True;
    end;
  end;
end;
6.  在頁面關(guān)閉的時候,同時關(guān)掉包含頁面的VCL Form.(僅限  InternetExplorer 6.0)
本功能需要卸載掉Delphi自帶的 WebBrowser組件,安裝ActionX組件(Microsoft Internet Controls V1.1),而且以后的程序只能運行在安裝有Internet Explorer 6.0 的環(huán)境下.具體方法如下:
在WebBrowser組件的OnWindowClosing事件中,輸入self.close; 代碼即可.如果需要阻止窗口的關(guān)閉, 設(shè)置CanClose參數(shù)的值為Flase.
7.  如何將頁面中超鏈接新開的頁面窗口包到指定的VCL窗口中.
procedure TForm1.webNewWindow2(Sender: TObject; var ppDisp: IDispatch;
  var Cancel: WordBool);
var
  form : TForm1;
begin
  form := TForm1.Create(nil);
  ppDisp := form.web.DefaultDispatch;
  form.Show;
end;
8. 在WebBrowser加載html頁面完成后,在頁面頂端插入HTML代碼, 下面兩種方式斗可以.
{1. ----------------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
var
  Range: IHTMLTxtRange;
begin
  Range := ((WebBrowser1.Document as IHTMLDocument2).body as
    IHTMLBodyElement).createTextRange;
  Range.collapse(False);
  Range.pasteHTML(‘<br/><b>Hello!</b>‘);
end;
{2. ----------------------------------------------------------------}
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  WebDoc: HTMLDocument;
  WebBody: HTMLBody;
begin
  WebDoc := WebBrowser1.Document as HTMLDocument;
  WebBody := WebDoc.body as HTMLBody;
  WebBody.insertAdjacentHTML(‘BeforeEnd‘, ‘<h1>Hello World!</h1>‘);
end;
9. 將頁面中顯示的內(nèi)容全部選中,然后粘貼到Word文檔中.
  WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT);//全選網(wǎng)頁
  WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT);     //復制網(wǎng)頁
  WordDocu.Range.Paste;            //word文檔粘貼
  WebBrowser1.ExecWB(OLECMDID_UNDO, OLECMDEXECOPT_DODEFAULT);    //取消全選
  注:WebBrowser的Document屬性值和WordDocument的Document屬性值必須都不為nil.
10.             如何解決網(wǎng)頁不響應回車事件
 public
    { Public declarations }
    procedure MsgHandle(var Msg :TMsg; var Handled :Boolean);
  end;
var
  Form1: TForm1;
  FOleInPlaceActiveObject :IOleInPlaceActiveObject;
implementation
{$R *.DFM}
procedure TForm1.MsgHandle(var Msg :TMsg; var Handled :Boolean);
var
 iOIPAO :IOleInPlaceActiveObject;
 Dispatch :IDispatch;
begin
 if WebBrowser1 =nil then
 begin
  Handled :=False;
  Exit;
 end;
 Handled :=(IsDialogMessage(WebBrowser1.Handle, Msg) =True);
 if (Handled) and (not WebBrowser1.Busy) then
 begin
  if FOleInPlaceActiveObject =nil then
  begin
   Dispatch :=WebBrowser1.Application;
   if Dispatch <>nil then
   begin
    Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
    if iOIPAO <>nil then
     FOleInPlaceActiveObject :=iOIPAO;
   end;
  end;
 end;
 if FOleInPlaceActiveObject <>nil then
  if ((Msg.message =WM_KEYDOWN) or (Msg.Message =WM_KEYUP)) and ((Msg.wParam =VK_BACK) or (Msg.wParam =VK_LEFT) or (Msg.wParam =VK_RIGHT)) then
  else
   FOleInPlaceActiveObject.TranslateAccelerator(Msg);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMessage :=MsgHandle;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
 FOleInPlaceActiveObject :=nil;
end;
11.             如何在WebBrowser中調(diào)用當前頁面中的javascript函數(shù)SayHello()
WebBrowser1.OleObject.
    Document.parentWindow.execScript(‘SayHello()‘, ‘javascript‘);
//or
  (WebBrowser1.Document as IHTMLDocument2
).parentWindow.execScript(‘SayHello()‘, ‘javascript‘)
//or
webrowser1.document.script.SayHello();  

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1444471

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Delphi實現(xiàn)HTMLWebBrowser實現(xiàn)HTML界面
Delphi小技巧雜記
delphi:Ihtmldocument2接口的利用
Delphi WebBrowser始終在當前窗口打開新網(wǎng)頁
delphi WebBrowser控件上網(wǎng)頁驗證碼圖片識別教程(一)
WebBrowser 操作記要(萬一博客)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服