请问一个问题! ( 积分: 100 )

  • 主题发起人 主题发起人 fsldg
  • 开始时间 开始时间
F

fsldg

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('dd');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
beep;
end;

end.
Tform1 is derive from Tform. what is button1? is a member of Tform1?
who can explain these code:
" Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
"??
 
系统自动生成的代码,可以说是开发环境通过你的操作动作自动生成的代码
Button1: TButton;
Button2: TButton;
由所在窗体自动创建,并在窗体释放时自动释放,无需管理。
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
为按钮自动绑定的事件。应该属于前绑定吧。
 
两个按钮不是类的成员,它是什么?!
 
就是类的成员变量呀!
 
只要你在窗体上添加了Button1、Button2两个按钮时,系统就会自动生成
Button1: TButton;
Button2: TButton;
只要单击了他们的某一个事件就会生成相应的procedure、、、、、、
那些都是系统的自动声明,否则根本无法调用和使用啊!
 
成员变量不是在 privite public . protected 之内的么?
 
简单来说,那些东西可以都不用管,你要做的事就是在begin和end之间写代码
 
[:D][:D][:D]nobody know?
 
两个按钮是从TBUTTON继承出来的类的实例化
 
让我们结合Delphi的实例讨论对象的概念:
当您要建立一个新工程时,Delphi 将显示一个窗体作为设计的基础。在程序编辑器中,Delphi将这个窗体说明为一个新的对象类型,并同时在与窗体相关联的库单元中生成了创建这个新窗体对象的程序代码。
unit Unit1;
interface
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm) {窗体的类型说明开始}
private
{ Private declarations }
public
{ Public declarations }
end; {窗体的类型说明结束}
var
Form1: TForm1; {说明一个窗体变量}
implementation
{$R *.DFM}
end.
新的窗体类型是TForm1,它是从TForm继承下来的一个对象。它具有对象的特征:含有域或方法。由于您未给窗体加入任何部件,所以它只有从TForm类中继承的域和方法,在窗体对象的类型说明中,您是看不到任何域、方法的说明的。Form1称为TForm1类型的实例(instance)。您可以说明多个对象类型的实例,例如在多文档界面(MDI)中管理多个子窗口时就要进行这样的说明。每一个实例都有自己的说明,但所有的实例却共用相同的代码。
假设您向窗体中加入了一个按钮部件,并对这个按钮建立了一个OnClick事件处理过程。再查看Unit1的源程序,会发现TForm1的类型说明部分如下:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
现在TForm1对象有了一个名为Button1的域:它是您在窗体中加入的按钮。TButton是一个对象类型,Button1是Tbutton的一个实例。它被TForm1对象所包含,作为它的数据域。每当您在窗体中加入一个部件时,部件的名称就会作为TFom1的域加入到类型说明中来。在Delphi中,您所编写的事件处理过程都是窗体对象的方法。每当您建立一个事件处理过程,就会在窗体的对象类型中说明一个方法。
当您使用Object Inspector来改变对象(部件)的名称时,这个名称的改变会反映到程序中。例如,在Object Inspector中将Form1的Name属性命名为ColorBox,您会发现在类型说明部分,会将前文的TForm1改为:
TColorBox=class(TForm);
并且在变量说明部分,会说明ColorBox为TColorBox类型的变量,由Delphi自动产生的事件处理过程名称会自动改为TColorBox.Button1Click;但您自行编写的实现部分的代码却不会被自动修改。因此,如果您在改变Name属性前编写了程序,则您必须将事件处理过程中的对象名称进行改变。所以,原先的Form1.Color要改为ColorBox.Color。
 
域与类成员有什么区别和联系?!!
 
受RAD开发工具强大的VCL功能影响,入门不久的程序员对窗体类难以像通常提到的类那样去认识,这是程序员修练必经之道
区别很简单,窗体不但是类,而且它的源代码分两种,即pas文件和dfm文件
dfm文件的作用是窗体在调用FormCreate之前,执行的所有初始化工作,所以是源代码
这种方式被编译器支持,通过{$ *.dfm}这个指令,这几个字符很熟悉么,其意义正在于此
如果隐藏成员对类是适用的,那对窗体也将是适用的
如果属性发布对类是适用的,那对窗体也将是适用的
如果消息通信对类是适用的,那对窗体也将是适用的
如果单一职责对类是适用的,那对窗体也将是适用的
如果封装变化对类是适用的,那对窗体也将是适用的
如果粒度控制对类是适用的,那对窗体也将是适用的
是什么导致你就不能这么想呢
 
icc 说得有道理。但不够详细。详细就给分了!

如果单一职责对类是适用的,那对窗体也将是适用的
如果封装变化对类是适用的,那对窗体也将是适用的
如果粒度控制对类是适用的,那对窗体也将是适用的

什么意思
 
我的意思 就是你看待窗体,就要象看待类一摸一样,从语法上,设计原则上,体统结构上,如果都符合OO的一般规范,那么你肯定不会得到一个很烂的东西
你必须牢记: 窗体是类,窗体是GUI类
我越说越没重点了,技艺,还是从实践中意会最重要啊
 
后退
顶部