一、保存记录类型在data指针中:

procedure TForm1.getheaditems(pp:TfrxBand;hnode:THeadTreeNode;var i:Integer;var j:Integer;var zh,tmph:Integer;var tree:TTreeView);
type
Trec=record
     text:string;
     left,top,width,height:Integer;
     end;
 TPRec = ^TRec;
var
  h,lh,w,tp,lt,m,firstp:Integer;
  ht:THeadTreeNode;
  currentnode,pnode:TTreeNode;
  hh,ss,firsttext:string;
  ntrec:TPrec;
begin
  firsttext:=hnode.Text;
  ht:=hnode;
  m:=0;
  while True do
  begin
   w:=ht.Width;
   New(ntrec);
   if w>0 then
   begin
      hh:=ht.Text;
      lh:=ht.GetLevel;
      h:=ht.Height;
      if lh=1 then
         i:=0;
      //ss:='left:'+inttostr(j)+',top:'+inttostr(i)+',h:'+inttostr(h)+',w:'+inttostr(w)+',text:'+hh+',level:'+inttostr(lh);
      //Memo1.Lines.Add(ss);
      //build tree
      if lh=1 then
         currentnode:=tree.Items.Add(nil,hh)
      else
      begin
         pnode:=findtreeitem(tree,ht.Host.Text);
         currentnode:=tree.Items.AddChild(pnode,hh);
      end;
      ntrec^.text:=hh;
      ntrec^.Top:=i;
      ntrec^.Left:=j;
      ntrec^.Width:=w;
      ntrec^.Height:=h;
      currentnode.Data:=ntrec;//CreateMemoFun(pp,hh,'leftcolumns',baNone,nil,'',j, i, w, h);
      //ntrec:=TPRec(currentnode.Data);
      with ntrec^ do
      begin
           ss:='nodename:'+hh+',left:'+inttostr(left)+',top:'+inttostr(top)+',width:'+inttostr(width)+',height:'+inttostr(Height)+',level:'+inttostr(lh);
      end;
      Memo1.Lines.Add(ss);
      if m=0 then
         firstp:=i
      else
         i:=firstp;
   end else   //跳过不可见列
      w:=0;

if Assigned(ht.Child) then
    begin
       //tmph:=i;
       i:=i+h;
       getheaditems(pp,ht.Child,i,j,zh,tmph,tree);
    end else
    begin
        j:=j+w;
        zh:=i+h;
        //i:=tmph;
    end;
    ht:=ht.Next;
    m:=m+1;
    if ht.Text=firsttext then
    begin
       Break;
    end;

end;
end;

 
二、消除记录类型:
 
procedure TForm1.Button5Click(Sender: TObject);
type
Trec=record
     text:string;
     left,top,width,height:Integer;
     end;
 TPRec = ^TRec;
var
  tnode,fn:THeadTreeNode;
  level,ss:string;
  i:Integer;
begin
   with TreeView1 do
   begin
      for I := 0 to Items.Count-1 do
      begin
        level:=IntToStr(items[i].Level);
        if assigned(TPRec(items[i].Data)) then
        begin
           dispose(TPRec(items[i].Data));
           Memo1.Lines.Add('已释放指针:'+items[i].Text);
        end;
        ss:='nodename:'+items[i].Text+',level:'+level+',sn:'+inttostr(i);
        Memo1.Lines.Add(ss);
      end;
   end;
end;

在Treeview中节点的data属性中保存记录类型及其消除的办法的更多相关文章

  1. 006——VUE中的内容与属性中使用javascript表达式的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. js中的访问器属性中的getter和setter函数实现数据双向绑定

    嗯,之前在读js红宝书的时候,在对象那一章有介绍属性类型.第一种数据类型指的是数据属性,第二种是访问器属性.在初识vue的时候,其双向数据绑定也是基于访问器属性中的getter和setter函数原理来 ...

  3. IE8中li添加float属性,中英数字混合BUG

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 视图中 jquery 使用data属性

    示例:<input id='username' data-id="{$val['id']}" data-userName="{$val['name']}" ...

  5. jsp <form>表单提交中如何在value属性中写表达式

    <input type="text" name="grop_id" value="<%=rs.getString(2)%>" ...

  6. 多.h项目出现的问题:使用了预编译头依然出现error LNK2005:***obj已在***obj中定义与c++ error C2011: “xxx”:“class”类型重定义解决办法

    使用了预编译头依然出现error LNK2005:***obj已在***obj中定义 造成该问题的可能性比较多,本人将在今后遇到时添加进来,今天先放出本人遇到的一种情况. 多重包含含有变量定义的.h文 ...

  7. PyQt(Python+Qt)入门:Designer组件属性编辑界面中QWidget类相关属性详解

    本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找. 声明: 1.如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记: 2.本文为老猿Python学习 ...

  8. HTML 5:你必须知道的data属性

    原文:All You Need to Know About the HTML5 Data Attribute 译文:你必须知道HTML 5 的Data属性 译者:dwqs HTML 5的Data属性可 ...

  9. html 5实用特性之data属性

    HTML 5之前,我们必须依赖于class和rel属性来存储需要在网站中使用的数据片段,这种做法有时会在网站的外观和实用性之间产生冲突.而HTML 5 Data属性的存在就能很好满足需要. HTML5 ...

随机推荐

  1. Windows进程间通信--共享内存映射文件(FileMapping)--VS2012下发送和接收

    之前以为两个互不相关的程序a.exe b.exe通信就只能通过网络,人家说可以通过发消息,我还深以为不然,对此,我表示万分惭愧. 之前课本上说的进程间通信,有共享内存.管道等之类的,但没有自己操刀写过 ...

  2. hadoop System times on machines may be out of sync. Check system time and time zones.

    之前环境一直好好的,由于玩坏了一个mini3只能复制一个了,但是复制之后就出现这个问题了 解决办法是 设置xshell向每一个窗口发消息http://mofansheng.blog.51cto.com ...

  3. ubuntu安装中文man手册

    1.安装manpages-zh包 sudo apt-get install manpages-zh 2.修改manpath文件 执行如下命令: vi /etc/manpath.config %s+/u ...

  4. 【Mac系统】istatmenus6.20下载以及激活

    下载地址:https://pan.baidu.com/s/1-2-yw2NnOlGJ46D536t5uQ iStat Menus 的激活密码: Email: 982092332@qq.com SN: ...

  5. 【Mac系统】之Mysql数据库遇到修改数字密码的问题(SQL语法错误:ERROR 1064 (42000),密码策略等问题:ERROR 1819 (HY000))

    安装完Mysql也进行了第一次初始化密码以及修改密码规则(请参考文章),但是我想后续再改密码,出现了下面几个问题: #SQL语句错误问题 ERROR 1064 (42000): You have an ...

  6. 推荐android布局百分比框架

    githup:https://github.com/JulienGenoud/android-percent-support-lib-sample 下面是使用方法: Android Percent S ...

  7. Python中使用 Selenium 实现网页截图实例

    Selenium 是一个可以让浏览器自动化地执行一系列任务的工具,常用于自动化测试.不过,也可以用来给网页截图.目前,它支持 Java.C#.Ruby 以及 Python 四种客户端语言.如果你使用 ...

  8. [原]Nginx+Lua服务端合并静态文件

    http://homeway.me 0x01.About 源代码已经上传到github:https://github.com/grasses/nginx-lua-static-merger nginx ...

  9. 也谈在 .NET 平台上使用 Scala 语言(续)

    而我是在 Ubuntu 操作系统中使用 Scala.NET 的,应该没有这个问题. 那么,就让我们来測试一下吧. 如今,我们添加一个 DotNet.cs 文件,例如以下所看到的: 1 2 3 4 5 ...

  10. spring+struts1

    概括及介绍: 集成原理:在Action 中获得BeanFactory,通过BeanFactory取得业务逻辑对象 本例采用:JDK1.8,tomcat7.0.9  技术点:spring与strut1集 ...