title: Unable to declare string property defaults
body: <p>I'm writing a component which consists of many properties which are to appear in the Delphi IDE Object Inspector (published properties)...</p>
  
  <pre><code>type
    TMyComponent = class(TComponent)
    private
      FMyProperty: String;
    published
      property MyProperty: String read FMyProperty write SetMyProperty default 'Something';
    end;
  </code></pre>
  
  <p>However, it's not allowing me to apply a default value to a string property...</p>
  
  <pre><code>[DCC Error] MyUnit.pas(278): E2146 Default values must be of ordinal, pointer or small set type
  </code></pre>
  
  <p>All other property defaults work fine (Integer, Enum, etc.).</p>
  
  <p>My goal is to A) not save string properties to the DFM if they're the default value, and B) show the value in the Object Inspector as <strong>Bold</strong> if it's not the default, and regular if it is. There are over 130 properties which show for this component, and about 50 of them are string properties, some with rather large default values.</p>
  
  <p>Why am I not allowed to declare a string property with a default value? Is this a shortcoming with Delphi, or is there a technical reason why strings can't be defaulted?</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>If you really want to know what I'm doing, I'm encapsulating Inno Setup and wrapping the functionality into a component with an extensive property/collection editor. This topic pertains to just the <code>Setup</code> section alone, which consists of actually over 100 properties. Only about 20 of these properties are expected to actually be used for simple implementation, and therefore I don't want all the rest of those string properties to bloat the size of the DFM (if they're set to their defaults). Based on how the component is set up, it will produce an Inno Setup script file.</p>