zoukankan      html  css  js  c++  java
  • Delphi中使用TXMLDocument控件应注意的问题 转

    Delphi中使用TXMLDocument控件应注意的问题

    delphiconstructorxmlclass今天写了一个类,其中用到了TXMLDocument控件。这个控件我是要动态生成的。

    但是却遇到了非常奇怪的问题,下面分享一下

    procedure TMainForm.Button1Click(Sender:TObject);

    Var

      XML:TXMLDocument;

      I:Integer;

    begin

      XML:=TXMLDocument.Create(nil);

      XML.LoadFromFile(ExtractFilePath(Application.ExeName)+'demo.xml');

      XML.Active:=True;

      For I:=0 to XML.DocumentElement.ChildNodes.Count-1 do

      begin

         //do something

      end;

      XML.Free;

    end;

    问题就出现在了For 循环上,当点击按钮后 程序执行到For循环就卡死,没有错误提示,没有任何征兆。debug跟踪结果就是执行到这里后就停止不动了。曾经也用过很多次TXMLDocument控件,但都是直接拖动一个控件到窗体上,从来没有发生过这种事情,就为了解决这个问题我花了一上午的时间。后来吃完饭之后一个意外改动,解决了这个问题。

    原来,问题并不出在任何语法错误,而是在TXMLDocument实例进行初始化构造的时候,参数错了。应该将参数设置为Application或者Self,这样就可以顺利执行了。在Delphi中很多控件的AOwer参数都是可以为nil的,不知道为什么TXMLDocument在这个参数上这么特殊。

    如果确实要将TXMLDocument控件应用于单元,也可以这样来解决,就是通过传递参数的方法

    首先要引用Classes,xmldom, XMLIntf, msxmldom, XMLDoc

    然后在自定义类的构造函数中加一个AOwer:TComponent参数 形如

    type

        TMyClass=Class(TObject)

        public

            constructor Create(AOwer:TComponent);OverLoad;

        end;

    implementation

    constructor TMyClass.Create(AOwer:TComponent;ConfigFile:WideString);
    begin
      XML:=TXMLDocument.Create(AOwer);// 重点就在这
      XML.LoadFromFile(ConfigFile);
      // do something

      XML.Free;

    end;

    在调用这个类类时这样写

    procedure TMainForm.Button1Click(Sender:TObject);

    Var

      MyObject:TMyClass;

    begin

      MyObject:=TMyClass.Create(self,ExtractFilePath(Application.ExeName)+'demo.xml')

      //do something

      MyObject.Free;

    end;

    所用版本:Delphi 2007 Architect(with December 2007 update)

  • 相关阅读:
    [转]cmd-bat批处理命令延时方法
    chrome pyv8下载
    win10锁屏壁纸路径
    MongoDB系列—— Window 搭建Mongodb 集群
    JS判断所有IE浏览器所有版本
    网页中引用优酷视频默认自动播放超清
    SQL 还原或备份失败数据库变成单个用户模式无法访问
    百度webuploader 上传演示例子
    SQL Server 如何更改SQL Server和windows身份方式验证
    已经阻止此发布者在你的计算机上运行软件
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/3240643.html
Copyright © 2011-2022 走看看