首页 > 其他分享 >vst实例(9)创建编辑器

vst实例(9)创建编辑器

时间:2023-05-31 09:01:34浏览次数:47  
标签:function vst tcomboeditlink Fedit 编辑器 实例 stdcall end Boolean

先上编辑器单元的代码:

unit editlink;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, VirtualTrees;
type
   tcomboeditlink=class(TInterfacedObject, IVTEditLink)
   private
    Fedit:TComboBox;
    itemstrs:TStringList;
    Fnode:PVirtualNode;
    Fcolumn:Integer;
    Ftree:TVirtualStringTree;
   public
    constructor create;
    constructor createof(strings:TStrings);
    function BeginEdit: Boolean; stdcall;                  // Called when editing actually starts.
    function CancelEdit: Boolean; stdcall;                 // Called when editing has been cancelled by the tree.
    function EndEdit: Boolean; stdcall;                    // Called when editing has been finished by the tree. Returns True if successful, False if edit mode is still active.
    function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall;
                                                           // Called after creation to allow a setup.
    procedure ProcessMessage(var Message: TMessage); stdcall;
                                                           // Used to forward messages to the edit window(s)-
    procedure SetBounds(R: TRect); stdcall;
   end;
implementation
constructor tcomboeditlink.create;
begin
  inherited create;
  itemstrs:=TStringList.Create;
end;

constructor tcomboeditlink.createof(strings: TStrings);
begin
  create;
  itemstrs.Assign(strings);
end;

function tcomboeditlink.BeginEdit:Boolean;
begin
  Result:=True;
end;

function tcomboeditlink.CancelEdit:boolean;
begin
  Result:=True;
end;

function tcomboeditlink.EndEdit:boolean;
begin
  Fedit.Hide;
  Ftree.Text[Fnode,Fcolumn]:=Fedit.Text;
  Result:=True;
end;

function tcomboeditlink.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean;
begin
  Ftree:=TVirtualStringTree(Tree);
  Fnode:=Node;
  Fcolumn:=Column;
  fedit:=TComboBox.Create(Ftree);
  Fedit.Hide;
  Fedit.Parent:=Ftree;
  Fedit.Items.Assign(itemstrs);
  Fedit.Text:=Ftree.Text[Fnode,Fcolumn];
  FreeAndNil(itemstrs);
  Fedit.Show;
  Result:=True;
end;

procedure tcomboeditlink.SetBounds(R: TRect);
begin
  Fedit.BoundsRect:=r;
  Fedit.Width:=80;
end;

procedure tcomboeditlink.ProcessMessage(var Message: TMessage);
begin
  Fedit.WindowProc(Message);
end;
end.

编辑器通常由两个部分组成:

TInterfacedObject:编辑器的源控件,可以是tedit,可以是tcombobox,还可以是其它任何可视控件。

IVTEditLink:编辑器接口。

根据编辑器的接口,至少应该为以下部分写代码:

function BeginEdit: Boolean; stdcall;

用于开始编辑,如果返回false,则不允许编辑。

function CancelEdit: Boolean; stdcall;

用于取消编辑。通常情况下,编辑是允许取消的,但你可以在特定条件下不允许取消。如果不允许取消,只需设置result:=false即可。

function EndEdit: Boolean; stdcall;

用于编辑结束,在此阶段你应该写上你对于编辑结果的处理。

function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall;

用于准备开始编辑时的处理,例如本程序在此阶段才开始对combobox的items赋值,对编辑器的text进行赋值等等。

procedure ProcessMessage(var Message: TMessage); stdcall;

对消息的处理。

procedure SetBounds(R: TRect); stdcall;

对编辑器的边界的处理。

以上部分是必须重写的部分,事实上,你还可以写上对可视控件的诸如“onchange”“onkeypressed”等事件的处理,或者创建代码的重写等等。

标签:function,vst,tcomboeditlink,Fedit,编辑器,实例,stdcall,end,Boolean
From: https://www.cnblogs.com/luohq001/p/17445053.html

相关文章

  • 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项目中,您可以添加以下......
  • Shading-JDBC使用实例
    Sharding-JDBC是一个开源的数据库中间件,用于实现数据库分片和读写分离。它通过在应用程序和底层数据库之间添加一个透明的中间层来实现数据分片和路由。下面是一个简单的示例,展示了如何在Java应用程序中使用Sharding-JDBC:添加依赖项:在您的项目的构建文件(例如pom.xml)中,添加Shard......