关于TListView中的Data属性

赋值
type
    PAllHidenDate = ^AllHidenDate;
    AllHidenDate = record
        PriceID: Integer;
        OrderNumber: string;
        State: Integer;
        PriceData: WideString;
    end;

var
    HidenData: PAllHidenDate;

begin
    with lvDataViewAll.Items.Add do
    begin

        HidenData := New(PAllHidenDate);
        HidenData.PriceID := StrToIntDef(Node.Attributes['PriceID'], 0);
        HidenData.State := StrToIntDef(Node.Attributes['State'], 1);
        HidenData.OrderNumber := Node.Attributes['PriceNumber'];
        HidenData.PriceData := Node.XML;
        Data := HidenData;
    end;
end;

释放Data:
procedure TOrderQuotation.lvDataViewAllDeletion(Sender: TObject; Item:
    TListItem);
var
    HidenData : PAllHidenDate;
begin
    if Item.Data = nil then Exit;
    HidenData := Item.Data ;
    Dispose(HidenData);
end;


释放内存时需要和赋值时的指针类型相同,不然会出错内存泄漏。

    最近发现,WIN2003的内存管理比XP的内存管理要好很多(应该是容错能力比较强)。发现这个问题也因为上面的代码,在WIN2003中运行不会提示内存汇漏,而在XP中却会。

原文地址:https://www.cnblogs.com/sonicit/p/869650.html