滤镜类的继承关系:


TObject -> TPersistent -> TFilter -> TShaderFilter -> { 具体的滤镜类 }

//下面例子首先会用到 FMX.Filter 单元的四个公用方法:
procedure FillCategory(AList: TStrings);
procedure FillFiltersInCategory(const Category: string; AList: TStrings);
function FilterByName(const AName: string): TFilter;
function FilterClassByName(const AName: string): TFilterClass;

通过 FillCategory()方法可以获取滤镜的分类列表:


FillCategory(ListBox1.Items);

通过 FillFiltersInCategory()方法可以获取某个类别的滤镜列表:


FillFiltersInCategory('分类名称', ListBox2.Items);

通过 FilterByName()方法可以获取滤镜对象:


var
  filter: TFilter;
begin
  filter := FilterByName('滤镜名称'); //这很方便, 省得手动建立了
end;

通过 TFilter 的 FilterAttr()方法可以获取滤镜的信息:


var
  filter: TFilter;
  filterRec: TFilterRec; //滤镜信息被包装在 TFilterRec 类型的结构体中
begin
  filter := FilterByName('滤镜名称');
  filterRec := filter.FilterAttr;
  {因为 FilterAttr 是 class 方法, 所以也可以如下获取}
  filterRec := FilterClassByName('滤镜名称').FilterAttr;
end;

TFilterRec 结构:


TFilterRec = record
  Name: string;                //滤镜名称
  Desc: string;                //滤镜描述
  Values: TShaderValueRecArray; //滤镜的参数数组, TShaderValueRec 类型
end;

TShaderValueRec 结构:


TShaderValueRec = record
  Name: string;                //参数名称
  Desc: string;                //参数描述
  ValueType: TShaderValueType; //参数类型: vtFloat, vtPoint, vtColor, vtBitmap(数值、点、颜色值、图像)
  Value: Variant;              //参数值
  Min, Max, Default: Variant;  //参数的最小、最大及默认值
end;

测试: 需要两个 TListBox、一个 TMemo, 还有 OnCreate 事件和 TListBox 的 OnClick 事件.


uses System.TypInfo; //用于获取枚举名称

procedure TForm1.FormCreate(Sender: TObject);
begin
  FillCategory(ListBox1.Items); //获取分类名称列表
end; procedure TForm1.ListBox1Click(Sender: TObject);
var
  strItem1: string;
begin
  strItem1 := ListBox1.Items[ListBox1.ItemIndex];
  FillFiltersInCategory(strItem1, ListBox2.Items); //获取指定类别的滤镜列表   ListBox2.ItemIndex := ;
  ListBox2.OnClick(nil);
end; procedure TForm1.ListBox2Click(Sender: TObject);
var
  strItem2: string;
  filter: TFilter;
  filterRec: TFilterRec;
  shaderValueRec: TShaderValueRec;
begin
  strItem2 := ListBox2.Items[ListBox2.ItemIndex];
  filter := FilterByName(strItem2); //通过滤镜名称获取滤镜对象
  filterRec := filter.FilterAttr;  //获取滤镜对象的信息
//  filterRec := FilterClassByName(strItem).FilterAttr; //同上一行   Memo1.Text :=  '滤镜类名: ' + filter.ToString; //ClassName
  Memo1.Lines.Add('滤镜名称: ' + filterRec.Name);
  Memo1.Lines.Add('滤镜描述: ' + filterRec.Desc);
  Memo1.Lines.Add('------------------------------------------------');   for shaderValueRec in filterRec.Values do
  begin
    Memo1.Lines.Add('参数名称: ' + shaderValueRec.Name);
    Memo1.Lines.Add('参数描述: ' + shaderValueRec.Desc);
    Memo1.Lines.Add('参数类型: ' + GetEnumName(TypeInfo(TShaderValueType), Integer(shaderValueRec.ValueType)));
    if shaderValueRec.ValueType <> TShaderValueType.vtBitmap then
    begin
      Memo1.Lines.Add('当前值: ' + string(shaderValueRec.Value));
      Memo1.Lines.Add('最小值: ' + string(shaderValueRec.Min));
      Memo1.Lines.Add('默认值: ' + string(shaderValueRec.Default));
      Memo1.Lines.Add('最大值: ' + string(shaderValueRec.Max));
    end;
    Memo1.Lines.Add(EmptyStr);
  end;
end;

Delphi XE2 之 FireMonkey 入门(15) - 滤镜: 获取滤镜信息的更多相关文章

  1. Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem

    Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...

  2. Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid

    Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...

  3. Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox

    Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项 ...

  4. Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo

    Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如:   Memo1.UseSma ...

  5. Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览

    Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public   constructor Create(...); ov ...

  6. Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm

    Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...

  7. Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题

    Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...

  8. Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEdit

    Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditL ...

  9. Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox

    Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...

随机推荐

  1. Springboot+Jedis+Ehcache整合

    项目结构概览: 1. 导包 <parent> <groupId>org.springframework.boot</groupId> <artifactId& ...

  2. 如何将DataTable转换成List<T>

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  3. 机器学习-KNN算法详解与实战

    最邻近规则分类(K-Nearest Neighbor)KNN算法 1.综述 1.1 Cover和Hart在1968年提出了最初的邻近算法 1.2 分类(classification)算法 1.3 输入 ...

  4. 新建maven子模块 出现 Unable to read parent POM

    新建maven子模块 出现 Unable to read parent POM错误 于是把pom.xml文件中的 中文字符全部删除 包括 注释 最后成功建立

  5. 32. Longest Valid Parentheses (JAVA)

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  6. SQL SERVER 索引维护

    -- 全数据库索引重建 DECLARE @name varchar(100)DECLARE authors_cursor CURSOR FOR Select [name] from sysobject ...

  7. L3-016. 二叉搜索树的结构

    二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值:它的左.右子树也分别 ...

  8. 10年前文章_mpc8313的ltib安装以及u-boot重新编译

    Linux系统下安装ltib(linux target image builder): 1.       下载光盘到本地 wget http://192.168.1.4/share/vendor/mp ...

  9. linux系统快速搭建ftp服务器——实现匿名用户和创建用户访问服务器

    一.准备工作: linux系统为CentOS Linux release 7.5.1804 (Core)  可以使用 lsb_release -a  命令查看 window系统中安装 SecureCR ...

  10. php.ini中时区设置不成功解决方法

    一.在php.ini的[Date]中加入 [Date] date_default_timezone_set('UTC'); date.timezone = "Asia/Shanghai&qu ...