首页 > 其他分享 >VST实例(8)编辑

VST实例(8)编辑

时间:2023-05-31 09:01:45浏览次数:39  
标签:begin end Sender 编辑 实例 sl VST

VST的单元格支持编辑,使用普通的编辑很简单,VST提供了一个编辑器,是一个继承自TCUSTOMEDIT的编辑器。

TStringEditLink = class(TInterfacedObject, IVTEditLink);

1、发出编辑请求

向VST发出编辑请求,有以下三种方式:

第一种方式是,VST可以在treeoptions里设置toEditable可在鼠标放到单元格时,经过EditDelay设置的毫秒后开始编辑;

第二种方式是,也可在点击某单元格后,按键盘的F2,开始编辑。

前面两种编辑是有条件的:selectionoptions里不能包含“toFullRowSelect”。

第三种方式是直接调用函数editnode。

本程序请求编辑是通过双击单元格发出请求。事件是“onNodedbClick”代码如下:

procedure TForm2.vstNodeDblClick(Sender: TBaseVirtualTree;
  const HitInfo: THitInfo);
begin
  if not Assigned(HitInfo.HitNode) then Exit;
  if not HitInfo.HitColumn in [0,1,2,4,5] then Exit;
  if sender.GetNodeLevel(HitInfo.HitNode)=0  then Exit;
  Sender.EditNode(HitInfo.HitNode,HitInfo.HitColumn);
end;

本程序编辑的条件是:

如果没有点中节点,不编辑;

如果column不是指定column,不编辑。

如果是情报区,不编辑。

2VST允许编辑

在接收到编辑许可后,还需要VST允许才能进行编辑。允许的指令在事件onediting中编写,如果不写代码,自动认可允许编辑。

代码如下:

procedure TForm2.vstEditing(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; var Allowed: Boolean);
begin
  Allowed:=(Column in [0,1,3..5]) and (Sender.GetNodeLevel(node)=1);
end;

实际条件和前面是一致的。

3、创建编辑器

如果没有代码,自动使用TstringEditLink,在事件“OnCreateEditor ”中写代码。

本程序引用了自写单元editlink,创建编辑器代码如下:

procedure TForm2.vstCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; out EditLink: IVTEditLink);
var sl:TStringList;
begin
  sl:=TStringList.Create;
  case Column  of
    4:
    begin
      sl.Add('单跑道');
      sl.Add('多跑道');
      EditLink:=tcomboeditlink.createof(sl);
    end;
    5:
    begin
      sl.Add('主用');
      sl.Add('备用');
      EditLink:=tcomboeditlink.createof(sl);
    end;
  end;
  FreeAndNil(sl);
end;

column是4和5的时候,创建的是下拉选择框,其它时候使用了默认的TstringEditLink。

我们的编辑器是一个combobox的下拉框,需要在创建的时候添加下拉框的items;

4、保存编辑结果

编辑的结果处理在事件“onnewtext”中处理。如果不进行处理,编辑将无视处理结果。

代码如下:

procedure TForm2.vstNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; NewText: string);
begin
  with pcodes(Sender.GetNodeData(node))^ do
  begin
    case column of
      0:icao:=NewText;
      1:iata:=NewText;
      3:names:=NewText;
      4:rwy_style:=NewText;
      5:apt_type:=NewText;
    end;
  end;
end;

运行如下:

编辑前:

 

编辑时:

 

编辑完成后:

 

 

 

 

标签:begin,end,Sender,编辑,实例,sl,VST
From: https://www.cnblogs.com/luohq001/p/17445050.html

相关文章

  • vst实例(9)创建编辑器
    先上编辑器单元的代码:uniteditlink;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,VirtualTrees;typetcomboeditlink=class(TInterfacedObject,IVTEditLink)privateFedit:TComboBox;itemstrs:......
  • VST实例(10) hint(提示)
    VST也支持提示(hint)。毫无疑问,要让VST支持hint,首先肯定需要设置:SHOWHINT:=TRUE;其次,还应该设置hintmode。TVTHintMode=(hmDefault,hmHint,hmHintAndDefault,hmTooltip);hmDefault :显示控件的hint,即VST的hint。hmHint :显示程序返回的提示。hmHintAndDefa......
  • 【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
    全文链接:http://tecdat.cn/?p=32604原文出处:拓端数据部落公众号分析师:BaileyZheng和Lijie Zhang即使是同一种植物,由于生长的地理环境的不同,它们的特征会有所差异。例如鸢尾花,可分为山鸢尾、杂色鸢尾、维吉尼亚鸢尾。假设此时您得到了一朵鸢尾花,如何判断它属于哪一类呢?支......
  • 【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例|附代码数
    原文链接:http://tecdat.cn/?p=22862 最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。风险价值(VaR)是一种统计数据,用于量化公司、投资组合在特定时间范围内可能发生的财务损失程度什么是风险价值(VaR)?该指标最常被投资银行和商业银行用来确定其机构......
  • consul的入门实例
    Consul是一个开源的分布式服务发现和配置管理系统,由HashiCorp开发。它提供了服务注册与发现、健康检查、KV存储、多数据中心支持等功能,旨在简化分布式系统的构建和管理。Consul的入门实例主要涉及以下步骤:准备工作:安装Consul:根据您的操作系统,从Consul官方网站下载并安装Cons......
  • nginx实现负载均衡实例
    好的,这里提供一个简单的Nginx负载均衡配置示例,来说明其功能和配置方法。假设您有多个Web服务器提供相同的服务,您可以通过Nginx实现负载均衡以分担流量和请求压力。首先安装并启动Nginx。配置Nginx的负载均衡策略。在Nginx的主配置文件中(通常是/etc/nginx/nginx.conf......
  • ElasticSearch使用实例
    当涉及到Elasticsearch的入门实例时,以下是一个详细的示例,展示了如何使用Java高级REST客户端与Elasticsearch进行交互。准备工作:安装Elasticsearch:请按照Elasticsearch官方文档中的说明安装并启动Elasticsearch。添加依赖项:在您的项目的构建文件(例如pom.xml)中,添加Elasticsearc......
  • Solr的入门实例
    当涉及到Solr的入门实例时,以下是一个详细的示例,展示了如何设置Solr服务器并执行索引和查询操作。准备工作:安装Solr:请按照Solr官方文档中的说明安装并启动Solr服务器。创建集合:在Solr控制台上创建一个名为"my_collection"的集合。添加文档:创建一个名为"solr-demo"的Cor......
  • Eureka的入门实例
    当涉及到Eureka的入门实例时,以下是一个详细的示例,展示了如何设置Eureka服务器和注册服务。准备工作:添加依赖项:在您的Java项目中,添加以下依赖项以使用Eureka客户端和服务器:<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-st......
  • ShardingSphere使用实例
    ShardingSphere是一个开源的分布式数据库中间件,提供了数据库分片、读写分离、分布式事务等功能。下面是一个简单的示例,展示了如何在Java应用程序中使用ShardingSphere:添加依赖项:在您的项目的构建文件(例如pom.xml)中,添加ShardingSphere的依赖项。例如,在Maven项目中,您可以添加以下......