我把一个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文件我的理解就是起到一个为拷贝构造函数提供初始信息的作用,那位
能否指正一下
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文件我的理解就是起到一个为拷贝构造函数提供初始信息的作用,那位
能否指正一下
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文件了。
有个指针问题求教
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);才可以
我先问你一个问题,你为什么喜欢用
****************************************
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,强烈建议你使用我的方法。
分析的有大家风范 ^_^