unit uEditorRegistryUtils; interface uses Classes, Forms, uClassRegistryUtils, uCustomEditor; type { IEditorRegistry = interface (IComponentRegistry) 22F14B82-AC61-4987-847E-AF8513DE2A10 function CreateEditor(const aClassOrDisplayname: String; aOwner: TComponent = NIL): TCustomEditor; end; TEditorRegistry = class(TComponentRegistry, IEditorRegistry) protected procedure ValidateMinAcceptableClass(var aMinAcceptableClass: TClass); override; function CreateEditor(const aClassOrDisplayname: String; aOwner: TComponent = nil): TCustomEditor; end; } IEditorRegistry = interface (IFormRegistry) ['{F6AC050F-5547-4E1F-AA44-DA0D06EDA4D7}'] function CreateEditor(const aClassOrDisplayname: String; aOwner: TComponent = NIL): TForm; end; TEditorRegistry = class(TFormRegistry, IEditorRegistry) protected function CreateEditor(const aClassOrDisplayname: String; aOwner: TComponent = nil): TForm; end; function CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; var EditorRegistry : IEditorRegistry; implementation uses SysUtils, cxControls; function CreateEditor(const AName: String; const IID: TGUID; out Intf): Boolean; begin ShowHourglassCursor; try Result := Supports(EditorRegistry.CreateEditor(AName, Application), IID, Intf); finally HideHourglassCursor; end; end; { TEditorRegistry } function TEditorRegistry.CreateEditor(const aClassOrDisplayname: String; aOwner: TComponent): TForm; begin if not Assigned(AOwner) then AOwner := Application; Result := CreateComponent( aClassOrDisplayname, aOwner ) as TForm; end; {procedure TEditorRegistry.ValidateMinAcceptableClass( var aMinAcceptableClass: TClass); begin inherited; if not aMinAcceptableClass.InheritsFrom(TCustomEditor) then aMinAcceptableClass := TCustomEditor; end;} initialization EditorRegistry := TEditorRegistry.Create; finalization EditorRegistry := NIL; end.