• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi中实现MDI子窗体(转)发布时间:2022-07-18
下一篇:
delphi中Message消息的使用方法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap