zoukankan      html  css  js  c++  java
  • Delphi XE2 之 FireMonkey 入门(15)

    滤镜类的继承关系:


    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 := 0;
      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;
  • 相关阅读:
    React在componentDidMount里面发送请求
    React 术语词汇表
    React里受控与非受控组件
    React和Vue等框架什么时候操作DOM
    【LeetCode】79. Word Search
    【LeetCode】91. Decode Ways
    【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
    【LeetCode】1. Two Sum
    【LeetCode】141. Linked List Cycle (2 solutions)
    【LeetCode】120. Triangle (3 solutions)
  • 原文地址:https://www.cnblogs.com/dzdd/p/3346833.html
Copyright © 2011-2022 走看看