TTreeNode编程思路

2023-11-17

导读:

   TTreeNode编程思路

   

  (本问以TreeView为例子讲述,其他的用到TTreeNodes的控件的编程思想如出一辙)TreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。

  一、针对TTreeNodes,也就是 TreeView.Items,有这些属性:

  1、count,节点个数。

  2、item[index] ,通过index得到节点。

  二、针对TTreeNodes,也就是 TreeView.Items,常用的添加节点的操作有:

  AddFirst添加第一个根节点。由此函数添加的节点总排在前面,除非后来又使用此函数添加了一个节点,则后添加的节点将排在前面。该函数返回新添加的节点。

  AddChildFirst添加第一个子节点,要求有父节点作为其参数。返回新添加的节点。

  AddChild添加一个子节点,要求有父节点作为其参数。返回新添加的节点。

  Add添加一个兄弟节点,要求有兄弟节点作为其参数。返回新添加的节点。

  三、针对TTreeNodes,也就是 TreeView.Items,常用的得到节点的操作有:

  GetFirstNode() 得到根节点。

  然后配合TTreeNode.GetNext(),就可以访问所有的节点。

  四、建树举例:

  var

  root_node,cur_node:TTreeNode;

  begin

  root_node:=AddFirst(nil,根节点

  1);

  cur_node:=addChildfirst(root_node,nil,根节点

  1_child1);

  add(cur_node,根节点

  1_child2);

  root_node:=Add(nil,根节点

  2);

  AddChildFirst(root_node,根节点

  2_child1);

  end;

  五、事件触发:

  当从一个节点跳到另一个节点,会触发TTreeView.OnChange事件。该事件中,将传递node,即当前被选中的节点。

  当修改一个节点的text时,会触发TTreeView.onEdit事件。

  六、将节点和节点所对应的数据联系起来

  对于每个TTreeNode,有个Data属性,可以存放一个指针。我们可以利用这个域来存放与节点对应的自己的数据。

  1.我们先定义一个数据结构,作为记录我们要记录的数据。如:

  type

  PMyData=^TMyData;

  TMyData=Record

  sFName:string;

  sLName:String;

  nIndex:integer;

  end;

  2.然后,创建数时,将节点和节点数据联系起来:

  procedure TForm1.Button1Click(Sender: TObject);

  var

  myshuju: PMyData

  cur_node:TTreeNode;

  begin

  New(MyRecPtr); //

  记住,一定要先分配内存。有几个节点,就要分配几次内存。

  myshuju^.FName:=Edit1.Text;

  Myshuju^.LName := Edit2.Text;

  TreeViewIndex := StrToInt(Edit3.Text);

  with TreeView1 do

  begin

  cur_node:=items.AddFirst(nil,first);

  cur_node.data:=myshuju;

  end;

  end;

  3.当我们选中一个节点时,就可以使用我们的数据了。

  procedure TForm1.TreeView1Change(Sender:TObject;Node:TTreeNode);

  begin

  if node.data<>nil then

  self.label1.caption:=pmyData(node.data)^.Fname+pmyData(node.data)^.Lname

  end;

  七、一般使用流程:

  1、添加全局变量:

  b_first:boolean; //记录是否是第一次访问节点,因为此时数据还未准备好,而一旦访问节点就会触发OnChange事件,在此事件处理函数中也许会出错。

  2、在FormCreate中,

  a、设置b_first:=true;

  b. 创建数并将节点与数据联系。

  3、在FormShow中

  设置b_first:=false;

  4.在事件OnChange中处理节点被选中事件。

  5.在Edit中处理节点被修改Text事件。

  并调用OnChange.

  6.在 TreeView.Destory中

  释放Data 中指向的内存空间。

  八、更改checktree节点状态

  状态命令为一个集合:TRzCheckState=( csUnknown,csUnchecked,csChecked,csPartiallyChecked);若想将某个节点的状态更改成选中可:stateitme[i]:=cschecked;其他状态类似。

  九、锁定checktree各个节点的选择操作

  void __fastcall TForm1::RzCheckTree1Changing(TObject *Sender,

  TTreeNode *Node, bool &AllowChange)

  {

  AllowChange = false;

  }

  



本文转自

http://hi.baidu.com/badbest/blog/item/896257cd5105c9550eb3454d.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TTreeNode编程思路 的相关文章

  • 如何使用 awk 将 mac addr 转换为 int?

    Input 192 168 0 1 aa bb cc 00 11 22 192 168 0 1 aa 00 bb 11 cc 22 192 168 10 11 2a bb cc 20 11 22 192 168 10 11 aa 02 bb
  • 从字符串中提取值

    我正在尝试从字符串中提取值 我试图获取re match工作但没有任何运气 该字符串是 opt ad bin ptzflip r nValue 1800 r nMin 0 r nMax 3600 r nStep 1 r n 我努力了 map
  • Matlab:从一定范围内不重复的随机整数

    我想获得一个包含在范围内且不重复的随机整数的数组 我使用了 randperm 15 3 输出是 8 10 12 这个函数不使用范围 我只想从 10 中随机取值 例如 如果您有统计工具箱 则可以使用randsample https www m
  • 如何用R删除字符串中的重复字符?

    我想实现一个功能R删除字符串中的重复字符 例如 假设我的函数名为removeRS 所以它应该这样工作 removeRS Buenaaaaaaaaa Suerrrrte Buena Suerte removeRS Hoy estoy tris
  • Python 中聚类相似字符串的算法?

    我正在编写一个脚本 该脚本当前包含多个 DNA 序列列表 每个列表都有不同数量的 DNA 序列 并且我需要根据汉明距离相似性对每个列表中的序列进行聚类 我当前的实现 目前非常粗糙 提取列表中的第一个序列并计算每个后续序列的汉明距离 如果它在
  • 拆分计算器的输入字符串

    我正在尝试拆分用户为我的计算器提供的输入 例如 如果用户输入 23 45 1 1 我希望将其拆分为 23 45 1 1 你正在寻找的东西叫做lexer A lexer将输入分割成块 称为tokens 您可以阅读 幸运的是 您的词法分析器非常
  • 如何重载Lua字符串下标运算符?

    This debug getmetatable index function s i return s sub i i end 和这个 debug getmetatable index proc lua read 不起作用 Try debu
  • 如何从整数生成 unicode 字符?

    我想创建一个 Unicode 字符数组 但我不知道如何将整数转换为 Unicode 表示形式 这是我到目前为止的代码 NSMutableArray uniArray NSMutableArray alloc initWithCapacity
  • 使用 ELKI 对字符串数据进行聚类

    我需要使用 ELKI 基于编辑距离 编辑距离对大量字符串进行聚类 由于数据集太大 我想避免基于文件的预计算距离矩阵 我怎么能够 a 从文件 仅 标签 加载 ELKI 中的字符串数据 b 实现访问标签的距离函数 扩展 AbstractDBID
  • sprintf 与 String.Format 的性能[重复]

    这个问题在这里已经有答案了 我正在比较 sprintf 用法的性能 并对我所看到的感到有点困扰 我测试了以下 4 个方法 将 ClassWithToString 的实例传递给每个方法 PrintInt 除外 它接收实际的整数值 type C
  • Tesseract 无法读取这个极其简单的数字串

    我目前正在用 python 编写一个脚本 需要使用 tesseract 来读取如下数字 仅使用数字和 psm 6 或 7 它输出 5 551 我在其他数字上取得了一些成功 5 700 有效 但这个特定的数字给我带来了很多问题 不幸的是 我的
  • 为什么 string.Empty 比 "" 更推荐?

    Why is string Empty比更推荐 是因为当编译器解析代码时 来了 编译器会准备好读取一个字符串吗 但在string Empty编译器甚至不会准备好读取字符串 还有另一个原因 常量 由于其本质 是一个 静态是对某个应用程序域中所
  • 将字符串数组转换为字节数组

    好吧 在有人试图将其标记为重复之前 我是not要求将字符串转换为字节数组 我想要一个字符串数组 包含类似这样的内容 5 168 188 28 29 155 转换为字节数组 我已经搜索过 只能找到字符串到字节数组 这是完全不同的 谢谢 编辑
  • 替换VBA中的变量字符串

    我需要替换字符串中的某些内容 但替换的内容可能会有所不同 有可能 XY test XXxY test XXyyXx TEST yXyy Test 以及几乎任何其他空格和上述情况的组合 我需要替换 test 部分并保留 XXX 所以 当使用简
  • 在 Python 中将 int 转换为字符串

    我希望能够生成多个名为 fileX txt 的文本文件 其中 X 是某个整数 for i in range key filename ME i txt Error here Can t concat a string and int fil
  • VB6中如何将十六进制字符串转换为字节数组

    我有以下字节数组 Dim Template 1023 As Byte 然后我调用指纹扫描仪设备函数并返回以下内容 Template 0 70 Template 1 77 Template 2 82 Template 1023 0 然后我将字
  • 没有 DateAdd() 的 SSIS 表达式前一个日期

    目前正在开发一个包 它将表达式从先前的日期传递到文件名 我当前的代码如下作为字符串变量 DT WSTR 20 DATEPART YYYY Dateadd DD 1 dateadd MM datediff MM DT DATE 1900 01
  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • 使用 Scala 在 Apache Spark 中拆分字符串

    我有一个数据集 其中包含以下格式的行 制表符分隔 Title lt t gt Text 现在对于每个单词Text 我想创建一个 Word Title 一对 例如 ABC Hello World gives me Hello ABC Worl

随机推荐

  • 现代密码学-密码学概论与基本知识

    目录 简介 密码学发展简史 创建 发展阶段 古典密码时期 近代密码时期 现代密码时期 密码主要功能 机密性 完整性 认证性 不可否认性 密码系统的组成 密码分析学 定义 密码攻击类型 针对对称密码体制 针对对称密码体制 常用方法 密码体制的
  • 如何导出论文高清图片

    打开ps 我是ps2021 将论文拖进ps 点击图像 选择想找的图片 左上角文件 导出 导出为 可以选择jpg格式 100 品质导出 得到高清大图
  • iOS 传文件到服务器,ios ftp上传文件到服务器

    ios ftp上传文件到服务器 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS 不需要写代码 也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份 这里以CDM周期性备份FTP的文件到OBS为例进行介绍 例如 FT
  • 清理电脑运行内存

    清理运行内存 电脑控制面板 管理工具 windows内存诊断 重启电脑 前言 现在好多电脑都只有8G运行内存 在大多数情况下都供给不了我们日常的工作娱乐的需求 简单来说用个ps软件都卡到飞起 这时候很多人就选择加装内存条 但是加装了内存条
  • 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设

    应用实践 数仓体系效率全面提升 同程数科基于 Apache Doris 的数据仓库建设 导读 同程数科成立于 2015 年 是同程集团旗下的旅游产业金融服务平台 2020 年 同程数科基于 Apache Doris 丰富的数据接入方式 优异
  • 基于Python的微博舆论分析,微博情感分析可视化系统(V2.0)

    简介 Python基于微博的舆情分析 情感分析可视化系统 微博舆情分析系统 项目后端分爬虫模块 数据分析模块 数据存储模块 业务逻辑模块组成 功能包括 登陆注册 用户管理 热门事件展示 舆情分析 包括舆情分析 情感分类 用户分布 关键词云图
  • 逆向爬虫-sojson混淆反调加密

    文章目录 一 获取sojson代码 二 sojson加密特点和原理 三 过sojson姿势方法 3 1 格式化正则释义 3 2 网页调试过sojson 3 3 静态文件替换过sojson 一 获取sojson代码 JS加密混淆 本次使用代码
  • 阶段性回顾

    阶段笔记 Day01 1 请你简单介绍下软件开发中系统架构的演变 单一应用 gt 垂直拆分 gt 分布式服务 gt 服务治理 SOA gt 微服务架构 2 远程调用的方式有几种 他们的区别如何 如何选择 远程调用有两种方式 RPC Remo
  • 编程每日一题_C程序设计_两整型数据求和

    问题描述 Calculate a b 问题来源https zoj pintia cn problem sets 91827364500 problems Time Limit 2000 ms Memory Limit 65536 KB In
  • HTML5做移动开发一定要搞明白MPA 与 SPA 的差别

    用HTML5做WEB与移动开发一定要搞明白MPA 与 SPA 的差别 刚开始可能会不明白 为什么习惯pc端web app开发 会发现Sencha Touch这样的框架 用起来有点别扭 老在想那熟悉的多页面开发方式 却总也找不到实现的接口 也
  • Mac系统下Flutter安装教程

    一 下载Flutter 1 第一种方式git repo方式 执行下列命令下载最新的flutter代码 系统请先安装Git git clone b beta https github com flutter flutter git 2 第二种
  • 如何解决:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    如何解决 ConnectionRefusedError WinError 10061 由于目标计算机积极拒绝 无法连接 在阅读 Python编程 从入门到实践 17 1 6时遇到了这个问题 项目场景 import requests url
  • spyglass使用教程

    spyglass使用教程 ic 爱好者的博客 CSDN博客
  • vivo手机计算机恢复出厂设置,vivo手机系统恢复出厂设置里面清除所有数据

    哎呀 手机怎么又卡了 完了这局农药又要输了 这个破手机 才用了一年就卡的不要不要的了 是时候要通过恢复出厂设置来解决了 但它真的能让我们的手机变流畅吗 什么是恢复出厂设置 顾名思义 恢复出厂设置就是将手机里所有的设置还原到最开始时的状态 就
  • [网络安全自学篇] 三.Burp Suite安装配置、Proxy基础用法及流量分析示例

    最近开始学习网络安全相关知识 接触了好多新术语 感觉自己要学习的东西太多 真是学无止境 也发现了好几个默默无闻写着博客 做着开源的大神 接下来系统分享一些网络安全的自学笔记 希望读者们喜欢 上一篇文章分享了Chrome浏览器保留密码功能渗透
  • vue的transition动画条上下跳动

    vue部分
  • Dynamics 365 DevOps CI/CD之ConfigurationData

    ConfigurationData如省市区 门店地址这种业务类型的数据 还有系统自定义过程中配置或开发涉及的参数 需要在系统间进行同步 此处CI用到了Power Platform Tool这个工具 这个也是可以在Azure DevOps的商
  • 进度条程序

    package progressbar import java awt BorderLayout import java awt Container import java awt Dimension import java util Ar
  • java中FileReader的使用

    package com test io01 import java io File import java io FileNotFoundException import java io FileReader import java io
  • TTreeNode编程思路

    导读 TTreeNode编程思路 本问以TreeView为例子讲述 其他的用到TTreeNodes的控件的编程思想如出一辙 TreeView由节点构成 建树通过对TreeView items属性进行操作 Items是一个TTreeNodes