| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> delphi >> Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏 Delphi zhong shi yong ListView he TreeView de Item zhong de Data ke neng bei hu lue de nei cun xie lou
 

Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏

2007-03-16 11:14:41 编辑來源:互联网 繁體版 评论
 
 
本文为【Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏】的汉字拼音对照版显示拼音
  Delphizhongdajiazai使shiyong ListViewheTreeViewshiyibandouhui使shiyongdaoItemdeDatashuxinglaibaocundajiazijideneibushujuzhegeDatadeshengmingruxia

  property Data: Pointer;

  dajiakeyikandaotajiushiyigezhizhen使shiyongshangyibanleisiruxiadaimayiListViewwei

  tianjiashi

   PViewItemState = ^TViewItemState;

   TViewItemState = record

   ViewItemId: integer;

   end;

  var

   nLoop: integer;

   li: TListItem;

   pp: PViewItemState;

  begin

   for nLoop := 0 to 10 do

   begin

   li := ListView1.Items.Add;

   li.Caption := IntToStr(nLoop);

   new(pp);

   pp^.ViewItemId := nLoop;

   li.Data := pp;

   end;

  end;

  shanchuxiangyingdexiangshiduoshucaiyong

   ListView1.DeleteSelected; huo

   ListView1.Clear;

  jiujieshulecaozuo

  danshizhelicunzaifeichangdadeweixianjiushiwomendezijifenpeideDataneirongyoumeiyoushifangDelphiwendangzhongyemeiyouguanyuzhegewentideshuomingsuoyiwozuoleyigeceshifaxianDelphishibuzidongshifangzhexieshujudezhexieweishifangdeshujuzaiyigebaohanjiaoduoxiugaideListViewhuozheTreeViewzhongjiangfeichangweixianruguoshichangqiyunxingdexitongjianggengweixianDelphiwendangzhongyemeiyoutishizhexieshujuxuyaoshifang

  qishizhegewentirongyibeidajiahuluejiejuebanfahuanshiyoudeerqieyebunanzhelijiuyao使shiyongdaoListViewhuozheTreeViewdeOnDeletionshijianDelphizhongguanyuOnDeletiondeshuomingruxia

  Occurs when an item in the list view is about to be deleted.

  Delphi syntax:

  property OnDeletion: TLVDeletedEvent;

  C++ syntax:

  __property TLVDeletedEvent OnDeletion = {read=FOnDeletion, write=FOnDeletion};

  Description

  Write an OnDeletion event handler to respond when an item in the list is about to be deleted. The Item parameter is the TListItem object from the Items property that is about to be deleted.

  yejiushishuodangxuyaoshanchuxiangmushihuichufazhegeshijianzaiVCL Source zhongyekeyikandaotiaoyongguochengqishijiejuefangfajiushizaizhegeshijianzhongjiaruyigeyujujiukeyilebingqieshibukeyiqueshaodeyujudaimaruxia

  procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);

  begin

   Dispose(Item.Data);

  end;

  zheyangjiukeyianquandeshifangdiaoDatadeneicunle原文】【拼音
 
 
 
上一篇《DELPHI的一些开发技巧和方法(二)》
下一篇《Delphi 消息机制引入的一个副作用》
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
Delphi中大家在使用 ListView和TreeView时,一般都会使用到Item的Data属性来保存大家自己的内部数据,这个Data的声明如下: property Data: Pointer; 大家可以看到它就是一个指针,使用上一般类似如下代码(以ListView为) 添加时 PViewItemState = ^TViewItemState; TViewItemState = record ViewItemId: integer; end; var nLoop: integer; li: TListItem; pp: PViewItemState; begin for nLoop := 0 to 10 do begin li := ListView1.Items.Add; li.Caption := IntToStr(nLoop); new(pp); pp^.ViewItemId := nLoop; li.Data := pp; end; end; 删除相应的项时多数采用 ListView1.DeleteSelected; 或 ListView1.Clear; 就结束了操作。 但是这里存在非常大的危险,就是我们的自己分配的Data内容有没有释放,Delphi文档中也没有关于这个问题的说明,所以我做了一个测试,发现Delphi是不自动释放这些数据的,这些未释放的数据在一个包含较多修改的ListView或者TreeView中将非常危险,如果是长期运行的系统将更危险,Delphi文档中也没有提示这些数据需要释放。 其实这个问题容易被大家忽略,解决办法还是有的,而且也不难,这里就要使用到ListView或者TreeView的OnDeletion事件,Delphi中关于OnDeletion的说明如下: Occurs when an item in the list view is about to be deleted. Delphi syntax: property OnDeletion: TLVDeletedEvent; C++ syntax: __property TLVDeletedEvent OnDeletion = {read=FOnDeletion, write=FOnDeletion}; Description Write an OnDeletion event handler to respond when an item in the list is about to be deleted. The Item parameter is the TListItem object from the Items property that is about to be deleted. 也就是说当需要删除项目时会触发这个事件,在VCL Source 中也可以看到调用过程,其实解决方法就是在这个事件中加入一个语句就可以了,并且是不可以缺少的语句,代码如下: procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem); begin Dispose(Item.Data); end; 这样就可以安全的释放掉Data的内存了。
󰈣󰈤
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
情人节的清纯女生(9)
情人节的清纯女生(8)
情人节的清纯女生(7)
情人节的清纯女生(6)
山东蓬莱海边组照
一探哲蚌 II
一探哲蚌 III
古长城的一角
 
>>返回首页<<
 
 
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有