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)

Delphi中使用TXMLDocument控件应注意的问题 转的更多相关文章

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

    今天写了一个类,其中用到了TXMLDocument控件.这个控件我是要动态生成的. 但是却遇到了非常奇怪的问题,下面分享一下 procedure TMainForm.Button1Click(Send ...

  2. Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器) 转

    关于用Delphi中的Indy控件实现收发邮件的几点学习记录             这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发 ...

  3. Delphi中的DBGrid控件

    在Delphi中,DBGrid控件是一个开发数据库软件不能不使用的控件,其功能非常强大,可以配合SQL语句实现几乎所有数据报表的显示,操作也非常简单,属性.过程.事件等都非常直观,但是使用中,有时侯还 ...

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

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

  5. delphi中通过http控件上载文件的问题(紧急) 整理的CSDN 帖子

    http控件能不能实现post文件?要求效果就像普通的html中通过表单(form中<INPUT TYPE="FILE" NAME="FILE1" SIZ ...

  6. 在DELPHI中动态创建控件以及控件的事件

    在DELPHI中我们经常要动态的创建控件以及控件的事件.例如,我们可能想根据程序需要动态的创建一些Tshape组件来创建某个图形,并使得在鼠标移动上去之后可以完成某些操作.这一般需要需要三步: 生成一 ...

  7. delphi中的Label控件背景透明

    Label1.Transparent:=true;你在它的属性窗口把它的Transparent属性改成TRUE就行了 来自为知笔记(Wiz)

  8. delphi中使用mediaplayer控件播放音乐

    新建一个名字为media的文件夹,把要播放的音乐文件放在这个文件夹里. ExtractFilePath是用来获得产生的可执行程式所在的路径,因为我们把要播放的音乐文件放在了可执行程式的那个根目录下. ...

  9. Delphi中TxmlDocument控件的用法 转

    Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xm ...

随机推荐

  1. CI 笔记7,easyui 异步加载

    在做后台导航时,需要异步加载,pid和id的循环问题,在controller中,建立另外一个方法,嵌套循环,查找是否pid〉1. public function nav_list() { $this- ...

  2. C语言开发环境配置

    链接:http://pan.baidu.com/s/1qWkpD72 密码:zhig 将解压包直接解压放在C盘下. 右击我的电脑,点属性—>高级—>环境变量然后在PATH里加入C:\Min ...

  3. iOS push全方位解析(二)【译文】"——生成OpenSSL证书,Provisioning Profile

    这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下: 1.[iOS push全方位解析](一) push的 ...

  4. js获取上传文件信息并及时查看

    <form id="picForm" name="picForm"  method="post" enctype="mult ...

  5. configure: error: Cannot find libmysqlclient under /usr Note that the MySQL client library is not bundled anymore! 报错解决

    错误说明 今天在centos 6.3 64位版本上安装PHP5.4.3时在./configure 步骤的时候出现了下面错误configure: error: Cannot find libmysqlc ...

  6. js插件动态加载js、css解决方案

    最近因为工作需要做了一个js自动导入的插件,一开始很天真的以为动态创建个script添加到head中就ok了,试了之后才发现了问题,就是如果同时引入了多个js文件,而且后一个文件中用到了前一个文件中的 ...

  7. iOS: 神奇的addSubView

    看着addSubView, 本以为是添加多个对象, 但通过测试代码, 发现同一个对象在addSubView中只会添加一次. 想想, 视图对象是通过引用得到的. 在视图的子视图集中, 只保存一个相应的对 ...

  8. C++11老关键字的新含义(auto, using,extern)

    http://blog.csdn.net/cnsword/article/details/8034947 公司可以使用c++11.看大牛的代码模仿使用,所以现在已经不知道什么使用的是c++的语法还是c ...

  9. dubbo 负载均衡中策略决策

    在dubbo中的服务端负载均衡配置,如果像以下情况,将需要决策最终的负载策略问题: <dubbo:application name="hello-world-server" ...

  10. UITableView 全面详解

    在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信.QQ.新浪微博等软件基本上随处都是UITableView.当然它的广泛使用自然离不 ...