- { TClassFinder }
- TGetClass = procedure (AClass: TPersistentClass) of object;
- TClassFinder = class
- private
- FGroups: TList;
- public
- constructor Create(AClass: TPersistentClass = nil;
- AIncludeActiveGroups: Boolean = False);
- destructor Destroy; override;
- function GetClass(const AClassName: string): TPersistentClass;
- procedure GetClasses(Proc: TGetClass);
- end;
- { TClassFinder }
- constructor TClassFinder.Create(AClass: TPersistentClass;
- AIncludeActiveGroups: Boolean);
- var
- I: Integer;
- Group: TRegGroup;
- begin
- inherited Create;
- FGroups := TList.Create;
- RegGroups.Lock;
- try
- if AClass = nil then AClass := RegGroups.ActiveClass;
- for I := 0 to RegGroups.FGroups.Count - 1 do
- begin
- Group := RegGroups.FGroups[I];
- if Group.InGroup(AClass) then
- FGroups.Add(Group);
- end;
- if AIncludeActiveGroups then
- for I := 0 to RegGroups.FGroups.Count - 1 do
- begin
- Group := RegGroups.FGroups[I];
- if Group.Active then
- FGroups.Add(Group);
- end;
- finally
- RegGroups.Unlock;
- end;
- end;
- destructor TClassFinder.Destroy;
- begin
- FGroups.Free;
- inherited;
- end;
- function TClassFinder.GetClass(const AClassName: string): TPersistentClass;
- var
- I: Integer;
- begin
- Result := nil;
- RegGroups.Lock;
- try
- for I := 0 to FGroups.Count - 1 do
- with TRegGroup(FGroups[I]) do
- begin
- Result := GetClass(AClassName);
- if Result <> nil then Exit;
- end;
- finally
- RegGroups.Unlock;
- end;
- end;
- procedure TClassFinder.GetClasses(Proc: TGetClass);
- var
- I: Integer;
- begin
- RegGroups.Lock;
- try
- for I := 0 to FGroups.Count - 1 do
- TRegGroup(FGroups[I]).GetClasses(Proc);
- finally
- RegGroups.Unlock;
- end;
- end;
VCL类学习之(四) TClassFinder
最新推荐文章于 2019-10-01 17:35:00 发布