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;
    

  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/del/p/2193256.html
Copyright © 2011-2022 走看看