home *** CD-ROM | disk | FTP | other *** search
/ PC Format Collection 48 / SENT14D.ISO / tech / delphi / disk14 / doc.pak / DSGNINTF.INT < prev    next >
Encoding:
Text File  |  1995-08-24  |  25.0 KB  |  587 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {       Delphi Visual Component Library                 }
  4. {                                                       }
  5. {       Copyright (c) 1995 Borland International        }
  6. {                                                       }
  7. {*******************************************************}
  8.  
  9. unit DsgnIntf;
  10.  
  11. interface
  12.  
  13. {$N+,S-,W-}
  14.  
  15. uses SysUtils, Classes, Graphics, Controls, Forms, TypInfo;
  16.  
  17. type
  18.  
  19. { TComponentList }
  20.  
  21.   TComponentList = class(TObject)
  22.   public
  23.     constructor Create;
  24.     destructor Destroy; override;
  25.     function Add(Item: TComponent): Integer;
  26.     function Equals(List: TComponentList): Boolean;
  27.     property Count: Integer;
  28.     property Items[Index: Integer]: TComponent; default;
  29.   end;
  30.  
  31. { TPropertyEditor
  32.   Edits a property of a component, or list of components, selected into the
  33.   Object Inspector.  The property editor is created based on the type of the
  34.   property being edited as determined by the types registered by
  35.   RegisterPropertyEditor.  The Object Inspector uses the a TPropertyEditor
  36.   for all modification to a property. GetName and GetValue are called to display
  37.   the name and value of the property.  SetValue is called whenever the user
  38.   requests to change the value.  Edit is called when the user double-clicks the
  39.   property in the Object Inspector. GetValues is called when the drop-down
  40.   list of a property is displayed.  GetProperties is called when the property
  41.   is expanded to show sub-properties.  AllEqual is called to decide whether or
  42.   not to display the value of the property when more than one component is
  43.   selected.
  44.  
  45.   The following are methods that can be overriden to change the behavior of
  46.   the property editor:
  47.  
  48.     Activate
  49.       Called whenever the property becomes selected in the object inspector.
  50.       This is potientially useful to allow certian property attributes to
  51.       to only be determined whenever the property is selected in the object
  52.       inspector. Only paSubProperties and paMultiSelect, returned from
  53.       GetAttributes, need to be accurate before this method is called.
  54.     AllEqual
  55.       Called whenever there are more than one components selected.  If this
  56.       method returns true, GetValue is called, otherwise blank is displayed
  57.       in the Object Inspector.  This is called only when GetAttributes
  58.       returns paMultiSelect.
  59.     Edit
  60.       Called when the '...' button is pressed or the property is double-clicked.
  61.       This can, for example, bring up a dialog to allow the editing the
  62.       component in some more meaningful fashion than by text (e.g. the Font
  63.       property).
  64.     GetAttributes
  65.       Returns the information for use in the Object Inspector to be able to
  66.       show the approprate tools.  GetAttributes return a set of type
  67.       TPropertyAttributes:
  68.         paValueList:     The property editor can return an enumerated list of
  69.                          values for the property.  If GetValues calls Proc
  70.                          with values then this attribute should be set.  This
  71.                          will cause the drop-down button to appear to the right
  72.                          of the property in the Object Inspector.
  73.         paSortList:      Object Inspector to sort the list returned by
  74.                          GetValues.
  75.         paSubProperties: The property editor has sub-properties that will be
  76.                          displayed indented and below the current property in
  77.                          standard outline format. If GetProperties will
  78.                          generate property objects then this attribute should
  79.                          be set.
  80.         paDialog:        Indicates that the Edit method will bring up a
  81.                          dialog.  This will cause the '...' button to be
  82.                          displayed to the right of the property in the Object
  83.                          Inspector.
  84.         paMultiSelect:   Allows the property to be displayed when more than
  85.                          one component is selected.  Some properties are not
  86.                          approprate for multi-selection (e.g. the Name
  87.                          property).
  88.         paAutoUpdate:    Causes the SetValue method to be called on each
  89.                          change made to the editor instead of after the change
  90.                          has been approved (e.g. the Caption property).
  91.         paReadOnly:      Value is not allowed to change.
  92.     GetComponent
  93.       Returns the Index'th component being edited by this property editor.  This
  94.       is used to retieve the components.  A property editor can only refer to
  95.       multiple components when paMultiSelect is returned from GetAttributes.
  96.     GetEditLimit
  97.       Returns the number of character the user is allowed to enter for the
  98.       value.  The inplace editor of the object inspector will be have its
  99.       text limited set to the return value.  By default this limit is 255.
  100.     GetName
  101.       Returns a the name of the property.  By default the value is retrieved
  102.       from the type information with all underbars replaced by spaces.  This
  103.       should only be overriden if the name of the property is not the name
  104.       that should appear in the Object Inspector.
  105.     GetProperties
  106.       Should be overriden to call PropertyProc for every sub-property (or nested
  107.       property) of the property begin edited and passing a new TPropertyEdtior
  108.       for each sub-property.  By default, PropertyProc is not called and no
  109.       sub-properties are assumed.  TClassProperty will pass a new property
  110.       editor for each published property in a class.  TSetProperty passes a
  111.       new editor for each element in the set.
  112.     GetPropType
  113.       Returns the type information pointer for the propertie(s) being edited.
  114.     GetValue
  115.       Returns the string value of the property. By default this returns
  116.       '(unknown)'.  This should be overriden to return the appropriate value.
  117.     GetValues
  118.       Called when paValueList is returned in GetAttributes.  Should call Proc
  119.       for every value that is acceptable for this property.  TEnumProperty
  120.       will pass every element in the enumeration.
  121.     Initialize
  122.       Called after the property editor has been created but before it is used.
  123.       Many times property editors are created and because they are not a common
  124.       property across the entire selection they are thrown away.  Initialize is
  125.       called after it is determined the property editor is going to be used by
  126.       the object inspector and not just thrown away.
  127.     SetValue(Value)
  128.       Called to set the value of the property.  The property editor should be
  129.       able to translate the string and call one of the SetXxxValue methods. If
  130.       the string is not in the correct format or not an allowed value, the
  131.       property editor should generate an exception describing the problem. Set
  132.       value can ignore all changes and allow all editing of the property be
  133.       accomplished through the Edit method (e.g. the Picture property).
  134.  
  135.   Properties and methods useful in creating a new TPropertyEditor classes:
  136.  
  137.     Name property
  138.       Returns the name of the property returned by GetName
  139.     PrivateDirectory property
  140.       It is either the .EXE or the "working directory" as specified in
  141.       DELPHI.INI.  If the property editor needs auxilury or state files
  142.       (templates, examples, etc) they should be stored in this directory.
  143.     Properties indexed property
  144.       The TProperty objects representing all the components being edited
  145.       by the property editor.  If more than one component is selected, one
  146.       TProperty object is created for each component.  Typically, it is not
  147.       necessary to use this array since the Get/SetXxxValue methods will
  148.       propagate the values appropriatly.
  149.     Value property
  150.       The current value, as a string, of the property as returned by GetValue.
  151.     Modified
  152.       Called to indicate the value of the property has been modified.  Called
  153.       automatically by the SetXxxValue methods.  If you call a TProperty
  154.       SetXxxValue method directly, you *must* call Modified as well.
  155.     GetXxxValue
  156.       Gets the value of the first property in the Properties property.  Calls
  157.       the appropriate TProperty GetXxxValue method to retrieve the value.
  158.     SetXxxValue
  159.       Sets the value of all the properties in the Properties property.  Calls
  160.       the approprate TProperty SetXxxxValue methods to set the value. }
  161.  
  162.   TFormDesigner = class(TDesigner)
  163.   public
  164.     function CreateMethod(const Name: string; TypeData: PTypeData): TMethod; virtual; abstract;
  165.     function GetMethodName(const Method: TMethod): string; virtual; abstract;
  166.     procedure GetMethods(TypeData: PTypeData; Proc: TGetStrProc); virtual; abstract;
  167.     function GetPrivateDirectory: string; virtual; abstract;
  168.     function MethodExists(const Name: string): Boolean; virtual; abstract;
  169.     procedure RenameMethod(const CurName, NewName: string); virtual; abstract;
  170.     procedure ShowMethod(const Name: string); virtual; abstract;
  171.   end;
  172.  
  173.   TPropertyAttribute = (paValueList, paSubProperties, paDialog,
  174.     paMultiSelect, paAutoUpdate, paSortList, paReadOnly);
  175.   TPropertyAttributes = set of TPropertyAttribute;
  176.  
  177.   TPropertyEditor = class;
  178.  
  179.   TInstProp = record
  180.     Instance: TComponent;
  181.     PropInfo: PPropInfo;
  182.   end;
  183.  
  184.   PInstPropList = ^TInstPropList;
  185.   TInstPropList = array[0..1023] of TInstProp;
  186.  
  187.   TGetPropEditProc = procedure(Prop: TPropertyEditor) of object;
  188.  
  189.   TPropertyEditor = class
  190.   protected
  191.     function GetPropInfo: PPropInfo;
  192.     function GetFloatValue: Extended;
  193.     function GetFloatValueAt(Index: Integer): Extended;
  194.     function GetMethodValue: TMethod;
  195.     function GetMethodValueAt(Index: Integer): TMethod;
  196.     function GetOrdValue: Longint;
  197.     function GetOrdValueAt(Index: Integer): Longint;
  198.     function GetStrValue: string;
  199.     function GetStrValueAt(Index: Integer): string;
  200.     procedure Modified;
  201.     procedure SetFloatValue(Value: Extended);
  202.     procedure SetMethodValue(const Value: TMethod);
  203.     procedure SetOrdValue(Value: Longint);
  204.     procedure SetStrValue(const Value: string);
  205.   public
  206.     destructor Destroy; override;
  207.     procedure Activate; virtual;
  208.     function AllEqual: Boolean; virtual;
  209.     procedure Edit; virtual;
  210.     function GetAttributes: TPropertyAttributes; virtual;
  211.     function GetComponent(Index: Integer): TComponent;
  212.     function GetEditLimit: Integer; virtual;
  213.     function GetName: string; virtual;
  214.     procedure GetProperties(Proc: TGetPropEditProc); virtual;
  215.     function GetPropType: PTypeInfo;
  216.     function GetValue: string; virtual;
  217.     procedure GetValues(Proc: TGetStrProc); virtual;
  218.     procedure Initialize; virtual;
  219.     procedure SetValue(const Value: string); virtual;
  220.     property Designer: TFormDesigner;
  221.     property PrivateDirectory: string;
  222.     property PropCount: Integer;
  223.     property Value: string;
  224.   end;
  225.  
  226.   TPropertyEditorClass = class of TPropertyEditor;
  227.  
  228. { TOrdinalProperty
  229.   The base class of all ordinal property editors.  It established that ordinal
  230.   properties are all equal if the GetOrdValue all return the same value. }
  231.  
  232.   TOrdinalProperty = class(TPropertyEditor)
  233.     function AllEqual: Boolean; override;
  234.     function GetEditLimit: Integer; override;
  235.   end;
  236.  
  237. { TIntegerProperty
  238.   Default editor for all Longint properties and all subtypes of the Longint
  239.   type (i.e. Integer, Word, 1..10, etc.).  Retricts the value entrered into
  240.   the property to the range of the sub-type. }
  241.  
  242.   TIntegerProperty = class(TOrdinalProperty)
  243.   public
  244.     function GetValue: string; override;
  245.     procedure SetValue(const Value: string); override;
  246.   end;
  247.  
  248. { TCharProperty
  249.   Default editor for all Char properties and sub-types of Char (i.e. Char,
  250.   'A'..'Z', etc.). }
  251.  
  252.   TCharProperty = class(TOrdinalProperty)
  253.   public
  254.     function GetValue: string; override;
  255.     procedure SetValue(const Value: string); override;
  256.   end;
  257.  
  258. { TEnumProperty
  259.   The default property editor for all enumerated properties (e.g. TShape =
  260.   (sCircle, sTriangle, sSquare), etc.). }
  261.  
  262.   TEnumProperty = class(TOrdinalProperty)
  263.   public
  264.     function GetAttributes: TPropertyAttributes; override;
  265.     function GetValue: string; override;
  266.     procedure GetValues(Proc: TGetStrProc); override;
  267.     procedure SetValue(const Value: string); override;
  268.   end;
  269.  
  270. { TFloatProperty
  271.   The default property editor for all floating point types (e.g. Float,
  272.   Single, Double, etc.) }
  273.  
  274.   TFloatProperty = class(TPropertyEditor)
  275.   public
  276.     function AllEqual: Boolean; override;
  277.     function GetValue: string; override;
  278.     procedure SetValue(const Value: string); override;
  279.   end;
  280.  
  281. { TStringProperty
  282.   The default property editor for all strings and sub types (e.g. string,
  283.   string[20], etc.). }
  284.  
  285.   TStringProperty = class(TPropertyEditor)
  286.   public
  287.     function AllEqual: Boolean; override;
  288.     function GetEditLimit: Integer; override;
  289.     function GetValue: string; override;
  290.     procedure SetValue(const Value: string); override;
  291.   end;
  292.  
  293. { TSetElementProperty
  294.   A property editor that edits an individual set element.  GetName is
  295.   changed to display the set element name instead of the property name and
  296.   Get/SetValue is changed to reflect the individual element state.  This
  297.   editor is created by the TSetProperty editor. }
  298.  
  299.   TSetElementProperty = class(TPropertyEditor)
  300.   public
  301.     destructor Destroy; override;
  302.     function AllEqual: Boolean; override;
  303.     function GetAttributes: TPropertyAttributes; override;
  304.     function GetName: string; override;
  305.     function GetValue: string; override;
  306.     procedure GetValues(Proc: TGetStrProc); override;
  307.     procedure SetValue(const Value: string); override;
  308.    end;
  309.  
  310. { TSetProperty
  311.   Default property editor for all set properties. This editor does not edit
  312.   the set directly but will display sub-properties for each element of the
  313.   set. GetValue displays the value of the set in standard set syntax. }
  314.  
  315.   TSetProperty = class(TOrdinalProperty)
  316.   public
  317.     function GetAttributes: TPropertyAttributes; override;
  318.     procedure GetProperties(Proc: TGetPropEditProc); override;
  319.     function GetValue: string; override;
  320.   end;
  321.  
  322. { TClassProperty
  323.   Default proeperty editor for all objects.  Does not allow modifing the
  324.   property but does display the class name of the object and will allow the
  325.   editing of the object's properties as sub-properties of the property. }
  326.  
  327.   TClassProperty = class(TPropertyEditor)
  328.   public
  329.     function GetAttributes: TPropertyAttributes; override;
  330.     procedure GetProperties(Proc: TGetPropEditProc); override;
  331.     function GetValue: string; override;
  332.   end;
  333.  
  334. { TMethodProperty
  335.   Property editor for all method properties. }
  336.  
  337.   TMethodProperty = class(TPropertyEditor)
  338.   public
  339.     function AllEqual: Boolean; override;
  340.     procedure Edit; override;
  341.     function GetAttributes: TPropertyAttributes; override;
  342.     function GetEditLimit: Integer; override;
  343.     function GetValue: string; override;
  344.     procedure GetValues(Proc: TGetStrProc); override;
  345.     procedure SetValue(const AValue: string); override;
  346.   end;
  347.  
  348. { TComponentProperty
  349.   The default editor for TComponents.  It does not allow editing of the
  350.   properties of the component.  It allow the user to set the value of this
  351.   property to point to a component in the same form that is type compatible
  352.   with the property being edited (e.g. the ActiveControl property). }
  353.  
  354.   TComponentProperty = class(TPropertyEditor)
  355.   public
  356.     function GetAttributes: TPropertyAttributes; override;
  357.     function GetEditLimit: Integer; override;
  358.     function GetValue: string; override;
  359.     procedure GetValues(Proc: TGetStrProc); override;
  360.     procedure SetValue(const Value: string); override;
  361.   end;
  362.  
  363. { TComponentNameProperty
  364.   Property editor for the Name property.  It restricts the name property
  365.   from being displayed when more than one component is selected. }
  366.  
  367.   TComponentNameProperty = class(TStringProperty)
  368.   public
  369.     function GetAttributes: TPropertyAttributes; override;
  370.   end;
  371.  
  372. { TFontNameProperty
  373.   Editor for the TFont.FontName property.  Displays a drop-down list of all
  374.   the fonts known by Windows.}
  375.  
  376.   TFontNameProperty = class(TStringProperty)
  377.   public
  378.     function GetAttributes: TPropertyAttributes; override;
  379.     procedure GetValues(Proc: TGetStrProc); override;
  380.   end;
  381.  
  382. { TColorProperty
  383.   Property editor for the TColor type.  Displays the color as a clXXX value
  384.   if one exists, otherwise displays the value as hex.  Also allows the
  385.   clXXX value to be picked from a list. }
  386.  
  387.   TColorProperty = class(TIntegerProperty)
  388.   public
  389.     procedure Edit; override;
  390.     function GetAttributes: TPropertyAttributes; override;
  391.     function GetValue: string; override;
  392.     procedure GetValues(Proc: TGetStrProc); override;
  393.     procedure SetValue(const Value: string); override;
  394.   end;
  395.  
  396. { TCursorProperty
  397.   Property editor for the TCursor type.  Displays the color as a crXXX value
  398.   if one exists, otherwise displays the value as hex.  Also allows the
  399.   clXXX value to be picked from a list. }
  400.  
  401.   TCursorProperty = class(TIntegerProperty)
  402.   public
  403.     function GetAttributes: TPropertyAttributes; override;
  404.     function GetValue: string; override;
  405.     procedure GetValues(Proc: TGetStrProc); override;
  406.     procedure SetValue(const Value: string); override;
  407.   end;
  408.  
  409. { TFontProperty
  410.   Property editor the Font property.  Brings up the font dialog as well as
  411.   allowing the properties of the object to be edited. }
  412.  
  413.   TFontProperty = class(TClassProperty)
  414.   public
  415.     procedure Edit; override;
  416.     function GetAttributes: TPropertyAttributes; override;
  417.   end;
  418.  
  419. { TModalResultProperty }
  420.  
  421.   TModalResultProperty = class(TIntegerProperty)
  422.   public
  423.     function GetAttributes: TPropertyAttributes; override;
  424.     function GetValue: string; override;
  425.     procedure GetValues(Proc: TGetStrProc); override;
  426.     procedure SetValue(const Value: string); override;
  427.   end;
  428.  
  429. { TShortCutProperty
  430.   Property editor the the ShortCut property.  Allows both typing in a short
  431.   cut value or picking a short-cut value from a list. }
  432.  
  433.   TShortCutProperty = class(TOrdinalProperty)
  434.   public
  435.     function GetAttributes: TPropertyAttributes; override;
  436.     function GetValue: string; override;
  437.     procedure GetValues(Proc: TGetStrProc); override;
  438.     procedure SetValue(const Value: string); override;
  439.   end;
  440.  
  441. { TMPFilenameProperty
  442.   Property editor for the TMediaPlayer.  Displays an File Open Dialog
  443.   for the name of the media file.}
  444.  
  445.   TMPFilenameProperty = class(TStringProperty)
  446.   public
  447.     procedure Edit; override;
  448.     function GetAttributes: TPropertyAttributes; override;
  449.   end;
  450.  
  451. { TTabOrderProperty
  452.   Property editor for the TabOrder property.  Prevents the property from being
  453.   displayed when more than one component is selected. }
  454.  
  455.   TTabOrderProperty = class(TIntegerProperty)
  456.   public
  457.     function GetAttributes: TPropertyAttributes; override;
  458.   end;
  459.  
  460. { TCaptionProperty
  461.   Property editor for the Caption and Text properties.  Updates the value of
  462.   the property for each change instead on when the property is approved. }
  463.  
  464.   TCaptionProperty = class(TStringProperty)
  465.   public
  466.     function GetAttributes: TPropertyAttributes; override;
  467.   end;
  468.  
  469.   EPropertyError = class(Exception);
  470.  
  471. { TComponentEditor
  472.   A component editor is created for each component that is selected in the
  473.   form designer based on the component's type (see GetComponentEditor and
  474.   RegisterComponentEditor).  When the component is double-clicked the Edit
  475.   method is called.  When the context menu for the component is invoked the
  476.   GetVerbCount and GetVerb methods are called to build the menu.  If one
  477.   of the verbs are selected ExecuteVerb is called.  Paste is called whenever
  478.   the component is pasted to the clipboard.  You only need to create a
  479.   component editor if you wish to add verbs to the context menu, change
  480.   the default double-click behavior, or paste an additional clipboard format.
  481.   The default component editor (TDefaultEditor) implements Edit to searchs the
  482.   properties of the component and generates (or navigates to) the OnCreate,
  483.   OnChanged, or OnClick event (whichever it finds first).  Whenever the
  484.   component modifies the component is *must* call Designer.Modified to inform
  485.   the designer that the form has been modified.
  486.  
  487.     Create(AComponent, ADesigner)
  488.       Called to create the component editor.  AComponent is the component to
  489.       be edited by the editor.  ADesigner is an interface to the designer to
  490.       find controls and create methods (this is not use often).
  491.     Edit
  492.       Called when the user double-clicks the component. The component editor can
  493.       bring up a dialog in responce to this method, for example, or some kind
  494.       of design expert.  If GetVerbCount is greater than zero, edit will execute
  495.       the first verb in the list (ExecuteVerb(0)).
  496.     ExecuteVerb(Index)
  497.       The Index'ed verb was selected by the use off the context menu.  The
  498.       meaning of this is determined by component editor.
  499.     GetVerb
  500.       The component editor should return a string that will be displayed in the
  501.       context menu.  It is the responcibility of the component editor to place
  502.       the & character and the '...' characters as appropriate.
  503.     GetVerbCount
  504.       The number of valid indexs to GetVerb and Execute verb.  The index assumed
  505.       to be zero based (i.e. 0..GetVerbCount - 1).
  506.     Copy
  507.       Called when the component is being copyied to the clipboard.  The
  508.       component's filed image is already on the clipboard.  This gives the
  509.       component editor a chance to paste a different type of format which is
  510.       ignored by the designer but might be recoginized by another application. }
  511.  
  512.   TComponentEditor = class
  513.   public
  514.     constructor Create(AComponent: TComponent; ADesigner: TFormDesigner); virtual;
  515.     procedure Edit; virtual;
  516.     procedure ExecuteVerb(Index: Integer); virtual;
  517.     function GetVerb(Index: Integer): string; virtual;
  518.     function GetVerbCount: Integer; virtual;
  519.     procedure Copy; virtual;
  520.     property Component: TComponent;
  521.     property Designer: TFormDesigner;
  522.   end;
  523.  
  524.   TComponentEditorClass = class of TComponentEditor;
  525.  
  526.   TDefaultEditor = class(TComponentEditor)
  527.   protected
  528.     procedure EditProperty(PropertyEditor: TPropertyEditor;
  529.       var Continue, FreeEditor: Boolean); virtual;
  530.   public
  531.     procedure Edit; override;
  532.   end;
  533.  
  534. { RegisterPropertyEditor
  535.   Registers a new property editor for the given type.  When a component is
  536.   selected the Object Inspector will create a property editor for each
  537.   of the component's properties.  The property editor is created based on
  538.   the type of the property.  If, for example, the property type is an
  539.   Integer, the property editor for Integer will be created (by default
  540.   that would be TIntegerProperty). Most properties do not need specialized
  541.   property editors.  For example, if the property is an ordinal type the
  542.   default property editor will restrict the range to the ordinal subtype
  543.   range (e.g. a property of type TMyRange = 1..10 will only allow values
  544.   between 1 and 10 to be entered into the property).  Enumerated types will
  545.   display a drop-down list of all the enumerated values (e.g. TShapes =
  546.   (sCircle, sSquare, sTriangle) will be edited by a drop-down list containing
  547.   only sCircle, sSquare and sTriangle).  A property editor need only be
  548.   created if default property editor or none of the existing property editors
  549.   are sufficient to edit the property.  This is typically because the
  550.   property is an object.  The properties are looked up newest to oldest.
  551.   This allows and existing property editor replaced by a custom property
  552.   editor.
  553.  
  554.     PropertyType
  555.       The type information pointer returned by the TypeInfo built-in function
  556.       (e.g. TypeInfo(TMyRange) or TypeInfo(TShapes)).
  557.  
  558.     ComponentClass
  559.       Type type of the component to which to restrict this type editor.  This
  560.       parameter can be left nil which will mean this type editor applies to all
  561.       properties of PropertyType.
  562.  
  563.     PropertyName
  564.       The name of the property to which to restrict this type editor.  This
  565.       parameter is ignored if ComponentClass is nil.  This paramter can be
  566.       an empty string ('') which will mean that this editor applies to all
  567.       properties of PropertyType in ComponentClass.
  568.  
  569.     EditorClass
  570.       The class of the editor to be created whenever a property of the type
  571.       passed in PropertyTypeInfo is displayed in the Object Inspector.  The
  572.       class will be created by calling EditorClass.Create. }
  573.  
  574. procedure RegisterPropertyEditor(PropertyType: PTypeInfo; ComponentClass: TClass;
  575.   const PropertyName: string; EditorClass: TPropertyEditorClass);
  576.  
  577. procedure GetComponentProperties(Components: TComponentList;
  578.   Filter: TTypeKinds; Designer: TFormDesigner; Proc: TGetPropEditProc);
  579.  
  580. procedure RegisterComponentEditor(ComponentClass: TComponentClass;
  581.   ComponentEditor: TComponentEditorClass);
  582.  
  583. function GetComponentEditor(Component: TComponent;
  584.   Designer: TFormDesigner): TComponentEditor;
  585.  
  586. implementation
  587.