我把一个Button放入Form
  TForm1 = class(TForm)
    Button1: TButton;
  private
  public
  end;
问题1。这个Button1按理来说就是类TForm1的成员了,那么这个成员是private, public还
是protected呢
问题2。为什么我把这个成员移动到private区
  TForm1 = class(TForm)
  private
    Button1: TButton;
  public
  end;
编译不通过呢
问题3。dfm文件我的理解就是起到一个为拷贝构造函数提供初始信息的作用,那位
能否指正一下

解决方案 »

  1.   

    Q1:
    Exp:Delphi中有四种以上的成员变量修饰符,你可能知道其中的三种,常见的三种即Public、Private和Protected,我补充一种是Published。最后一种表示设计期可以编辑的成员变量,比如你的TButton类的对象,并且在RAD方式下,Published是默认的修饰符。
    A1:Button1是Published成员。
    ==========================================
    Q2:
    Exp:这个问题和上面的解释殊路同归,如果你采用RAD的方式,要在设计期编辑一个组件对象,其一定是一个Published成员。你可以试着声明另外一个TButton类对象Button2,注意不要采用RAD的方式,并置其为Private成员,我想没有任何问题。
    A2:你不能将一个窗体上的组件对象置为Private成员。
    ==========================================
    Q3:
    Exp:兄台想必是Cplus出身吧,你上面的话用到了其中的概念。不过在Delphi中你可以将.dfm类型的文件看作是实现永久对象的一种方式。请注意,Delphi使用流化技术正向将设计期的组件对象的属性存入.dfm类型文件中,这样就保证了当下一次编辑窗体及组件时Delphi可以使用流化技术反向将.dfm中保存的信息转化为可编辑的窗体和组件对象。
    A3:.dfm就是Delphi Form的缩写,是Delphi实现永久对象采用的保存机制,有了它你就可以在设计期多次修改你上一次的窗体及其组件对象了。注意,如果你仅新建一个.pas文件而不是窗体,那么就没有与之对应的.dfm文件了。
      

  2.   

    我认为这个BUTTON是published而并非public
      

  3.   

    马上就结
    有个指针问题求教
    type
      PButton = ^TButton;
    var
      DynButton:  PButton;
     然后
      New(DynButton);
      DynButton^:= TButton.Create(Self);
      DynButton^.Parent:=Self
    产生一个动态Buttion
    我的问题是
        New(DynButton);为什么不可去掉
    我的
    DynButton:  PButton;
    定义一个指针类型,然后TButton.Create(Self);产生一个对象,然后把指针DynButton指向这个对象,为什么非要一个  New(DynButton);才可以
      

  4.   

    To isis(isis):
        我先问你一个问题,你为什么喜欢用
    ****************************************
    type
      PButton = ^TButton;
    var
      DynButton:  PButton;
     然后
      New(DynButton);
      DynButton^:= TButton.Create(Self);
    ****************************************
    这样的方法动态创建Button,可以用
    ++++++++++++++++++++++++++++++++++++++++
    var
      DynButton:  TButton;
     然后
      DynButton^:= TButton.Create(Self);
    ++++++++++++++++++++++++++++++++++++++++
    不就行了吗?
    当然,如果你非要那样写的话,我可以告诉你。Delphi中的内存分配有两种,一是自动分配,一是手工分配,自定义的指针类型变量必须在使用前手工分配内存,否则出错。
    你的意思我明白,你认为TButton.Create(Self);产生一个对象,然后把指针DynButton指向这个对象就Over了,可是你这样做有点想当然了,系统不允许你这样做,它要求你在使用该指针类型变量之前明确地进行内存分配。或者这样说你更明白,当你使用DynButton^:= TButton.Create(Self);这句的时候DynButton根本就没有分配内存,怎么可能进行操作呢?
    如果你需要动态创建Button,强烈建议你使用我的方法。
      

  5.   

    creativepeter(头皮屑)
    分析的有大家风范 ^_^