type
  TActiveSide=(as_left,as_right,as_top,as_bottom);
  Ttest = class(Tcustompanel)
  private
    { Private declarations }
    fOpen:boolean;
    procedure setOpen(value:boolean);  protected
    { Protected declarations }
    procedure paint;override;
    ……
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy(); override;
  published
    { Published declarations }
    ……
    property open:boolean read FOpen write setOpen default true;
    ……为什么published中声明的open属性的默认值不起作用?

解决方案 »

  1.   

    default指令的意思不是设置属性默认值。它的意思是:当你在组件可视化设计时设置的属性值和它指定的值不相同时,才将该值存入dfm文件。比如
    property open:boolean read FOpen write setOpen default true;
    如果你在Object Inspector中设置open为true时,open不会被保存,否则保存到dfm文件中。
    要设置默认值,应该在构造函数Create中设置,如:
    constructor  Ttest.Create(AOwner: TComponent);
    begin
      inherited;
      open := true;
      //....
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    属性编辑器中显示的是True吗?Default的含义是,如果设置为True就不写入到.dfm文件当中去了。这样你在Create里面设置一下为True,此时,若dfm中没有定义此属性的值,那么就是True了,也不会触发设置此属性的方法。通常没有Default的时候BOOL的默认是False,如果在属性编辑中设置了True就会写入.dfm文件。stored,含义根据条件来设定是否写入DFM文件。nodefault,使用默认的规则写入dfm文件。
      

  3.   

    谢谢 lxpbuaa(桂枝香在故国晚秋)