Delphi中使用TXMLDocument控件应注意的问题
今天写了一个类,其中用到了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)
http://blog.csdn.net/chaijunkun/article/details/5407793
Delphi中使用TXMLDocument控件应注意的问题的更多相关文章
- Delphi中使用TXMLDocument控件应注意的问题 转
Delphi中使用TXMLDocument控件应注意的问题 delphiconstructorxmlclass今天写了一个类,其中用到了TXMLDocument控件.这个控件我是要动态生成的. 但是却 ...
- Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器) 转
关于用Delphi中的Indy控件实现收发邮件的几点学习记录 这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发 ...
- Delphi中的DBGrid控件
在Delphi中,DBGrid控件是一个开发数据库软件不能不使用的控件,其功能非常强大,可以配合SQL语句实现几乎所有数据报表的显示,操作也非常简单,属性.过程.事件等都非常直观,但是使用中,有时侯还 ...
- Delphi中代替WebBrowser控件的第三方控件
这几天,接触到在delphi中内嵌网页,用delphi7自带的TWebBrowser控件,显示的内容与本机IE8显示的不一样,但是跟装IE8之前的IE6显示一个效果.现在赶脚是下面两个原因中的一个: ...
- delphi中通过http控件上载文件的问题(紧急) 整理的CSDN 帖子
http控件能不能实现post文件?要求效果就像普通的html中通过表单(form中<INPUT TYPE="FILE" NAME="FILE1" SIZ ...
- 在DELPHI中动态创建控件以及控件的事件
在DELPHI中我们经常要动态的创建控件以及控件的事件.例如,我们可能想根据程序需要动态的创建一些Tshape组件来创建某个图形,并使得在鼠标移动上去之后可以完成某些操作.这一般需要需要三步: 生成一 ...
- delphi中的Label控件背景透明
Label1.Transparent:=true;你在它的属性窗口把它的Transparent属性改成TRUE就行了 来自为知笔记(Wiz)
- delphi中使用mediaplayer控件播放音乐
新建一个名字为media的文件夹,把要播放的音乐文件放在这个文件夹里. ExtractFilePath是用来获得产生的可执行程式所在的路径,因为我们把要播放的音乐文件放在了可执行程式的那个根目录下. ...
- Delphi中TxmlDocument控件的用法 转
Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xm ...
随机推荐
- sql server 2005 表master..spt_values
IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #tGOcreate table #t(id int identity,Dt varchar(10) ...
- Foundation 学习
官网 Foundation是个跟bootstrap齐名的前端框架. 移动优先,响应式,最低支持IE8. html+css+jq构建 网格Grid Basic: .row父容器 子元素类.column ...
- css重置
清除标签的默认样式 body{margin:0;}ul,ol{margin:0 auto;padding:0;}li{ list-style:none;}dl{margin:0;}dd{margin: ...
- 红豆带你从零学C#系列之——初识C#
问题一:什么是C#? C#是微软公司在2000年新推出的一款运行在.NET Framework平台上面的编程语言,这个.NET Framework平台又怎么去理解呢?举个例子来说好了,一个土著族人只会 ...
- C#实现多态之一抽象
1. 抽象类.抽象方法.抽象属性的特点 (1) 关键字:abstract (2) 抽象类只能是其他类的基类 (3) 抽象成员必须存在于抽象类中,但抽象类可以没有抽象成员, ...
- SnappyDB—Android上的NoSQL数据库简介
参考:http://www.open-open.com/lib/view/open1420816891937.html 参考:http://android-arsenal.com/details/1/ ...
- 一段关于 Unix、Linux 和 Windows 的暗黑史
“SCO 在言语上变得越来越好斗,而且还拒绝展示有关诉讼的任何证据,一切都似乎在表明,SCO只不过是在那里拉虎皮做大旗地狂言乱语.但是,微软 决不会轻易放弃这么可以一个利用这些狂言乱语的好机会.”20 ...
- 转: git常用命令
# git配置 #---------------------------------------------- #配置用户名和邮箱: $ git config --global user.name & ...
- Qt中如果通过QStyle自定义能够跨平台的界面控件
我们经常会碰到需要定制界面控件的要求.如果只是在一个平台上,比如说你的控件只需要在Windows上显示,那很好办,Hard code 你的look and feel就可以了.但是如果界面需要在不同平台 ...
- delphi ICS控件示例解读
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Author: Fran鏾is PIETTE ...