Delphi WebBrowser控件的使用中出现的bug:

 1、WebBrowser.Visible=false;Visible属性不能使WebBrowser控件不可见,暂时用 WebBrowser.Hide的方法代替,WebBrowser.Hide隐藏浏览器, WebBrowser.Show显示浏览器;
    补充:WebBrowser的OnVisible事件 控制窗口的可见或隐藏,用法同上(经测试Visual属性改变时不会激发)
    上述补充参考原网址:   http://www.tuicool.com/articles/2ai6fi    
    
 2、使用WebBrowser1.Quit;方法退出浏览器,系统报错“未指定目标”,解决办法暂无;
    
 3、Delphi中webbrowser 不能复制粘贴 
         delphi中WebBrowser控件打开的网页,不能复制、粘贴,包括右键菜单及快捷键。
解决办法如下:

引用:uses Activex;

把以下代码放在有WebBrowser控件的窗口最后一个End前面:

initialization
         oleinitialize(nil);
         finalization
         oleuninitialize;
转载于:http://blog.sina.com.cn/s/blog_62dcdf1a0100qu7d.html 
     4、webbrowser控件显示网页遇到页面内有关闭窗口脚本问题    
     问题讨论网址: http://bbs.csdn.net/topics/390229795

解决办法网址:http://www.cnblogs.com/dlwang2002/archive/2007/04/14/713499.html
代码:

//webbrowser控件显示网页遇到页面内有关闭窗口脚本问题。运行完后执行Window Close的提示

var

vDefInetExplorerServerProc: Pointer;

function InetExplorerServerWndProc(

hwnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;

begin

Result := CallWindowProc(vDefInetExplorerServerProc,

hwnd, Msg, wParam, lParam);

case Msg of

WM_DESTROY:

begin

SetWindowLong(hwnd, GWL_WNDPROC, Integer(vDefInetExplorerServerProc));

ShowMessage('Window Close');  //执行语句

end;

end;

end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;

const pDisp: IDispatch; var URL: OleVariant);

var

vShellDocObjViewHandle: THandle;

vInetExplorerServerHandle: THandle;

begin

vShellDocObjViewHandle := GetWindow(TWebBrowser(Sender).Handle, GW_CHILD);

vInetExplorerServerHandle := GetWindow(vShellDocObjViewHandle, GW_CHILD);

if Integer(@InetExplorerServerWndProc) <>

GetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC) then

begin

Integer(vDefInetExplorerServerProc) :=

GetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC);

SetWindowLong(vInetExplorerServerHandle, GWL_WNDPROC,

Integer(@InetExplorerServerWndProc));

end;

end;

//分割线

下面为从网页转载的web控件bug和解决办法参考

url:http://bbs.51cto.com/thread-656975-1.html

Delphi中WebBrowser控件的bug及解决方案
简介:  Delphi语言,无论是从开发速度、还是运行速度、还是编译速度、还是编译之后的执行文件体积,都是数一数二的。因此被作为共享软件、开发产品、制作“绿色软件”的首选。但是,由于诸多原因,Delphi中,有一些控件,存在一些bu ...
关键字:delphi WebBrowser 控件 Bug 复制 内存 泄漏 javascript close 
  Delphi语言,无论是从开发速度、还是运行速度、还是编译速度、还是编译之后的执行文件体积,都是数一数二的。因此被作为共享软件、开发产品、制作“绿色软件”的首选。但是,由于诸多原因,Delphi中,有一些控件,存在一些bug。不论广大技术人员如何反应,Delphi官方就是“视而不见”。有问题,人家虽然不给解决,但是,总不能不用这种语言吧,毕竟优点还是大于缺点的。还是“自己动手,丰衣足食”吧。
  最近笔者在开发泛东协同管理系统客户端的时候,使用了Delphi中的WebBrowser控件,相信这个控件,是使用最广泛的控件之一,几乎所有与Internet相关的产品,都离不开这个控件。但是这Delphi中的WebBrowser控件,在使用过程中,发现三个Bug。
  1、如果打开的页面中,有通过javascript关闭页面的,只会把控件关闭,包含控件的窗口仍然存在,并且手工关闭窗口时,出现问题;
  2、打开的页面,通过鼠标选定的内容,不能复制,无论是通过右键菜单复制,还是通过Ctrl+C快捷键复制,都不可以;
  3、打开有WebBrowser控件的窗口,关闭窗口之后,内存得不到释放(此Bug在其他语言中也存在)。

  以上三个问题,是必须解决的。通过查找资料及自己的试验,终于找到了解决办法,将解决方案总结如下:

问题1解决方案:
先声明消息处理函数:
procedure   ApplicationMessage(var   Msg:   TMsg;   var   Handled:   Boolean);

在form   create时   
Application.OnMessage   :=   ApplicationMessage;

函数内容如下:
procedure   tfrmhtmlbrowser.ApplicationMessage(var   Msg:   TMsg;   var   Handled:   Boolean);   
  var   
      wb:   tembeddedwb;   
  begin   
      WB   :=   GetVisibleWebBrowser;   //取当前webbrowser控件   
      if   (Msg.message   =   WM_CLOSE)   and   (Msg.hwnd   =   Wb.Handle)   then   
      begin   
          Self.Close ();//关闭webbrowser后,把相应的窗口关闭
      end   
      else   
          inherited;   
  end;

问题2解决方案:
引用:uses Activex;

把以下代码放在有WebBrowser控件的窗口最后一个End前面:
initialization
    oleinitialize(nil);
finalization
    oleuninitialize;

问题3解决方案:
修改Delphi的控件源码:OleCtrls.pas

修改此文件中的函数:GetIDispatchProp、GetIUnknownProp
修改如下:

function TOleControl.GetIDispatchProp(Index: Integer): IDispatch;
var
  Temp: TVarData;
begin
  GetProperty(Index, Temp);
  //Result := IDispatch(Temp.VDispatch);
  Pointer(Result) := Temp.VDispatch;
end;

function TOleControl.GetIUnknownProp(Index: Integer): IUnknown;
var
  Temp: TVarData;
begin
  GetProperty(Index, Temp);
  //Result := IUnknown(Temp.VUnknown);
  Pointer(Result) := Temp.VUnknown;
end;

修改之后,重新编译。

以上是Delphi中WebBrowser控件Bug的解决办法,希望对大家有帮助!

<总结>delphi WebBrowser控件的使用中出现的bug的更多相关文章

  1. Delphi WebBrowser控件的使用(大全 good)

    Delphi WebBrowser控件的使用 WebBrowser控件属性:1.Application      如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDis ...

  2. delphi WebBrowser控件上网页验证码图片识别教程(一)

    步骤一:获取网页中验证码图片的url地址 在delphi中加入一个BitBtn和一个memo以及WebBrowser控件实现网页中验证码图片的url地址的获取 程序如下:procedure TForm ...

  3. Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决

    Delphi中WebBrowser控件打开部分网站报"Invalid floating point operation”解决 EmbeddedWBWebBrowserDelphi  最近用E ...

  4. Delphi中代替WebBrowser控件的第三方控件

    这几天,接触到在delphi中内嵌网页,用delphi7自带的TWebBrowser控件,显示的内容与本机IE8显示的不一样,但是跟装IE8之前的IE6显示一个效果.现在赶脚是下面两个原因中的一个: ...

  5. 使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容

    原文:使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容 第一次在CNBlogs上发Post是提出一个有关使用WebBrowser控件时对SELECT网页元素操作的疑惑,这个问题至今也 ...

  6. 浏览器自动化的一些体会2 webBrowser控件之ajax

    上个帖子简要讨论了浏览器自动化的几种方法.现在讨论webBrowser控件使用中的一些问题.基本的操作就不详细说了,随便网上找个帖子或找本书都有介绍的.这里只写点网上似乎少有人总结过的内容,以及自己的 ...

  7. C#中的WebBrowser控件的使用

    0.常用方法   Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(st ...

  8. C# WebBrowser控件使用教程与技巧收集

    常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(strin ...

  9. C# 指定Webbrowser控件所用IE内核版本

    如果电脑上安装了IE8或者之后版本的IE浏览器,Webbrowser控件会使用IE7兼容模式来显示网页内容.解决方法是在注册表中为你的进程指定引用IE的版本号. 比如我的程序叫做a.exe,以64位机 ...

随机推荐

  1. C# 异步操作 async await

    在编程的过程中,我们会遇到很多需要异步操作的场景.比如要下载一个文件,如果使用同步的方式进行下载,那么UI操作就会被卡住,这时最好能够使用异步的方式进行下载.在C#中,很早就开始支持异步的操作了,只不 ...

  2. JetBrains.DotMemory.Keygen.4.x

    GoogleN久都没找到这一类的工具. 只好折腾一个了. CSDN 免积分 0积分 下载 http://download.csdn.net/detail/caizz520/7477865 全球首发-V ...

  3. Sql数据库查询当前环境有无死锁

    DECLARE @spid INT , @bl INT , @intTransactionCountOnEntry INT , @intRowcount INT , @intCountProperti ...

  4. 使用T4模板合并js文件

    不知道该怎么表达,或许直接贴图贴代码更好 前因:在第一个使用angularjs的项目中我将所有的controller写到一个文件里面,深知维护起来那滋味,所以再次使用angularjs的时候,我便把所 ...

  5. 数据结构:链表(python版)续:带有尾节点引用的单链表

    #!/usr/bin/env python # -*- coding:utf-8 -*- from chapter3.single_linked_list import LNode,LinkedLis ...

  6. 转载:《TypeScript 中文入门教程》 13、类型兼容性

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript里的类型兼容性基于结构子类型的. 结构类型是只一种只使用其成 ...

  7. patch 打补丁,和diff 生成制作补丁

    一.diff 命令: diff命令就是比较两个文件的差异,然后生成差异文件,即补丁文件. 参数:diff --help获得,最常用的 1.-N --new-file 在比较时,如果没有就拿一个空的文件 ...

  8. 从零开始学 Java - Windows 下安装 Eclipse

    三观是什么鬼 当我们在讨论「三观一致」的时候是在讨论些什么? 我认为这个世界上本没有「三观」这一说法,说的人多了,也就有了「三观」这个词,当我们讨论「三观一致」其实并不是真的在说世界观.价值观.人生观 ...

  9. Java子类属性继承父类属性

    public abstract class Parent { String name = "parent"; } public class Son extends Parent{ ...

  10. javascript组合继承

    javascript继承有几种继承方式,现在来说说其中的组合继承. 组合继承是结合了原型链和借用构造函数这两种技术的继承方式,分别利用它们的长处,避免了短处.那就先说说这两种技术吧. 原型链  原型链 ...