Delphi XE2의 FireMonkey 시작하기(15) - 필터:필터 정보 얻기

3924 단어 Delphi
필터 클래스의 상속 관계:

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;

좋은 웹페이지 즐겨찾기