delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
高分求助TWEBBROWSER问题 帮顶有分 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225015126140.html
用TWEBBROWSER做了一个浏览器,调用本机的两个网页文件  
  网页中有大量的JAVESCRIP脚本,  
  在来回切换时出现三种错误,这三种错误不经常出,但总有,  
        一个是MSHTML。DLL异常  
   
    二是弹出一个对话框,标题为“实时调试”  
     最上方是:“请选择一个调试器”  
     下面是一个列表框,标题为“可能的调试器”  
     列表框中有一个“新实例Mircosoft   script   editor”  
            下方是一个复选框,内容是将当前的调试器设为默认调试器,对后最下方是,是否希望用选定的调试器进行调试然后是按钮  
   
        三是 出现一个对话框,从英文看是告诉我在调试状态下  
   
    第一个问题是测试时在所有机器上都会出现  
    第二个问题和第三个问题,在有的机器上不出现,  
    第三个问题出现后,会直接关闭程序  
   
  开发环境 D7 XP   
  网页   javascrip,加MP7是由工具软件生成的  
  请高手解决  
   
  我的代码是这样  
          我有一个单元,定义了一个类,这个类从数据库中读出参数,生成实例,然后在界面上生成按钮  
          每个按钮对应这个类的一个实例  
          点击一个按钮则会打开相应的网页,这些网页都是存在本地的,是由软件生成的MP7课件  
          包含视频和PPT,并由网页中的javaSCRIPt   脚本负责视频和PPT的播放,同步问题,  
          网页内的脚本是由软件生成的,而且单独播放一个是没有问题的  
          问题都出在我不停的按按钮的时候,也就是我打开一个网页之后,马上又打开一个网页  
          我想是WEBBROWSER调入了新的网页,但原网页中的脚本没有释放干净,或者还在运行,造成了冲突,所以出现了这个问题  
          主要代码如下,  
          unit   define;  
   
  //  
            TPowerCtl   =   class(TObject)  
      private  
          but:   Boolean;  
          Fobj:   Tcontrol;  
          FCtlInfo:   TCtlFieldINfo;  
          oldx:   Integer;  
          oldy:   Integer;  
          procedure   objClick(Sender:Tobject);  
          procedure   objenter(sender:Tobject);  
   
  procedure   TPowerCtl.objClick(Sender:Tobject);  
  var  
      i:integer;  
      doc:IHTMLDOCUMENT2;  
  //   temp:integer;  
  begin  
    //   temp:=0;  
      For   i:=0   to   TControl(sender).Parent.ControlCount-1   do  
      begin  
   
          if   TControl(TControl(sender).Parent.Controls[i]).Tag   =9999   then     //网页控件的TAG  
          begin  
              while     TWebBrowser(TControl(sender).Parent.Controls[i]).ReadyState   <>4     do  
                Application.ProcessMessages;//   完成后再执行  
   
              TWebBrowser(TControl(sender).Parent.Controls[i]).Stop   ;  
   
              doc:=TWebBrowser(TControl(sender).Parent.Controls[i]).document   as   IhtmlDOCument2;  
              doc.close   ;  
              doc.clear   ;  
   
              TWebBrowser(TControl(sender).Parent.Controls[i]).Navigate(MainPath+self.FCtlInfo.FINdexPage);         //调入相应的网页  
   
              doc._Release;  
          end;  
      end;  
   
   
  end;  
   
  由主窗体调用这个单元,  
  在这个单元的初始化事件中初始化了OLE控件//这点我有疑问,到底在那初始化好  
                                                                    //     WEB是办面上固定的,是否应当写在PRJ的初始化事件  
                                                                    //或是主窗体单元的初始化事件中  
 

顶一下  
  上一贴上帮过忙的兄弟,上一贴已结贴给分,但如有空,请继续帮忙,

顶顶~

顶了,看...

你得把两个网页给出来吧

估计是因为:objClick还没执行完,新的objClick又执行了  
  需要想办法避免这样的情况  
   
  方案1  
  procedure   TPowerCtl.objClick(Sender:Tobject);  
  //。。  
  begin  
      Enabled   :=   False;   //   还没处理完的时候别让用户切换  
  //打开网页  
      Enabled   :=   True;   //   处理完后才允许切换  
  end;  
   
  方案2  
  别用while   do  
  通过事件WebBrowser1.OnDocumentComplete处理文档下载完的事件  
   
 

伴水兄,  
  由于网页打开一个新的网页之后,会自已去调用网页,所以我觉得用ONDOCUMENTCOMPLETE靠不住,,  
  我现在用readystate=4   来控制控件的enabled,  
  但是问题还是一样,  
  有没有办法在我中止网页的同时,中止网页中脚本的执行  
 

剪兄  
    两个网页加起来300多M,我估计发不出来,含视频和PPT的,脚本也不是我写的,

沒遇到過,我幫頂!

初始化一定要加,很重要,格式:  
  uses   ActiveX;  
   
   
  Initialization  
        OleInitialize(nil);  
  finialization  
        OleUnInitialize;  
   
 

两个网页加起来300多M,我估计发不出来,含视频和PPT的,脚本也不是我写的,  
   
   
  大汗,给出网页代码就可以吧!ppt和视频都是本地调用。  
  不过新手,不会webbrowser的异常处理。

初始化应当加在那个单元?

结帐给分

posted on 2008-09-19 13:44 delphi2007 阅读(199) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。