1。如何初始化控件的string属性?就像Edit的Text那样当你拖下一个控件后就自动赋了值?default无法给string的property指定缺省值
2。property的 stored true/false 怎么用?有什么用途?

解决方案 »

  1.   

    重载create在其中初始化string的值即可
      

  2.   

    重载create没用
    初始化后出来仍是空白
    boolean的也不行
    好象create里的语句不会执行一样,不知道怎么回事
      

  3.   

    不如去查看一下delphi的源代码,去看看他是怎么实现的
      

  4.   

    stored设为false,表示永远不在DFM里面存储它的值,也就是说,你这次把它赋了值,那么下次打开这个DFM时,它的值又变成空了,因为没有存储。
      

  5.   

    default不是默认值,是表示是否在DFM文件中存储.
    处理控件的Paint消息可不可以?
      

  6.   

    怀疑,你是不是string的那项属性的赋值事件有问题?
    例如一般是这样吧
    FText: string;
    procedure SetText(Value: string);
    roperty Text: string read FText write SetText;
    procedure 控件名.SetText(Value:String);  //写text属性
    begin
      if( FText<>Value)then
      begin
         FText:=Value;
         Invalidate();
      end;
    end;constructor TMyButton1.Create(AOwner: TComponent);
    begin
      FText         :='test';
    end;
      

  7.   

    怀疑,你是不是string的那项属性的赋值事件有问题?
    例如一般是这样吧
    FText: string;
    procedure SetText(Value: string);
    roperty Text: string read FText write SetText;
    procedure 控件名.SetText(Value:String);  //写text属性
    begin
      if( FText<>Value)then
      begin
         FText:=Value;
         Invalidate();
      end;
    end;constructor 控件名.Create(AOwner: TComponent);
    begin
      FText         :='test';
    end;
      

  8.   

    to  vargent77(地平线) 
    我完全按你的写法,拖个下来Text还是空白unit x;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Parser;type
      Tx = class(Twincontrol)
      private
        { Private declarations }
    FText: string;
    procedure SetText(Value: string);
      protected
        { Protected declarations }
      public
        { Public declarations }
    constructor Create(AOwner: TComponent);
      published
        { Published declarations }
    property Text: string read FText write SetText;
      end;procedure Register;implementation
            
    procedure tx.SetText(Value:String);  //写text属性
    begin
      if( FText<>Value)then
      begin
         FText:=Value;
         Invalidate;
      end;
    end;constructor tx.Create(AOwner: TComponent);
    begin
      FText:='test';
    end;
    procedure Register;
    begin
      RegisterComponents('Samples', [Tx]);
    end;end.
      

  9.   

    to qiandeng(千灯) 
    我没跟踪到它在哪里对label的caption或edit的text自动赋值,我不明白csSetCaption的原理
    delphi源码里似乎没有对string的直接初始化的语句
    to xjlqlqlq(小虫) 
    能不能说得具体点?
    to SeaWave()、fengyvn(山有木兮木有枝,心悦卿兮卿不知)
    应该是stored代表是否存值到dfm的?因为是boolean的,另一个default有什么用?
      

  10.   


    Q:1->放在Loaded事件中一定可以的.
      

  11.   

    对的,在loaded事件中可以实现,把它重载一下
      

  12.   

    constructor tx.Create(AOwner: TComponent);
    begin
      inherited; ///////应加上这句
      FText:='test';
    end;
      

  13.   

    在控件构造的过程中对其控件的string属性赋值即可.
      

  14.   

    原来我把constructor create(aowner:tcomponent); override
    的override错写成overload而被系统忽略了.........