Posted on 1998-11-09
Delphi's RegisterPropertyEditor procedure has the following declaration:
procedure RegisterPropertyEditor(PropertyType: PTypeInfo; ComponentClass: TClass; const PropertyName: string; EditorClass: TPropertyEditorClass);
The help file says the following: "Set the PropertyName parameter to restrict the property editor to properties with a specific name as well as the specified property type."
I would like to override the TStrings property editor, but ONLY for properties with a "specific name" (as the help file says) e.g. Address. Thus for ANY component with a TStrings-derived property called "Address" it must use my property editor, but for all other TStrings-derived properties (e.g. TMemo's "Lines" property) Delphi must use the original property editor.
The problem I'm having is that Delphi uses my editor for all TStrings properties (e.g. TMemo's "Lines" property), instead of only for properties called "Address".
This is what my original code looked like:
RegisterPropertyEditor(TypeInfo(TStrings), nil, 'Address', TAddressPropEd);
The way I got around this problem is to declare my own class that is derived from TStrings:
TAddressStrings = class(TStringList);
RegisterPropertyEditor(TypeInfo(TAddressStrings), nil, 'Address', TAddressPropEd);
The above code works, but I don't understand why it's necessary to derive my own class (if the help file is correct).
(I've tried this in D3 and D4, and both give the same result.)