初学者几个问题,请指教(50分)

  • 主题发起人 主题发起人 阿魁
  • 开始时间 开始时间

阿魁

Unregistered / Unconfirmed
GUEST, unregistred user!
1.在进行类的声明时,没有加可见性限定符的元素是不是public?
2。每个窗体都对应一个单元文件,在此单元文件里只有该窗体的声明和定义,为什么要在该单元的
interface部分声明一个该窗体的类变量?联想到在窗体上的控件也对应了一个类中的变量,是不是
在interface部分被声明变量的窗体会被自动创建,没有声明的就不会被自动创建?
3。在.dpr文件中,是不是需要use所有工程中的窗体所对应的单元文件,还是只use在该文件中
被使用的窗体单元?

小弟刚接触delphi,望各位多多指教。
我分数不多,因为刚来,需要的话,咱们慢慢来吧,呵呵
 
1.当当前类或其交类加了编译标识{$M+}的时候为published,否则为public.
2.首先,你可以在同一个单元声明多个类,包括从TForm继承的类,而且你类当然是需要实例
化才能使用,所以就必须再声明一个该类的变量. 你所指的自动创建其实是在项目单元里
创建的,关于是否自动创建可以在菜单Project|Options|forms里设定,或修改项目单元.
当然,如果没有声明变量,自然不可能创建实例.
3.不是必须use所有单元,不过一般来说你不用去管项目文件(.dpr文件)。[8D]
 
在.dpr文件中,不需要use所有工程中的窗体所对应的单元文件,只要use在该文件中被使用的窗体单元.
 
1.和你的编译选项有关好像是{$M+},{$M-}
分别是published,public(具体那个是哪个我不及的了)
2.窗体上的控件其实是你窗体类的一个属性,在窗体被创建的同时
他们也被创建了如:
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

3.是只use在该文件中被使用的窗体单元也可以,如:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, unit2, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form2 := TForm2.Create(self);
Form2.ShowModal;
end;
end.

unit Unit2;

interface

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

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

end.
 
谢谢!
第一和第三我懂了,第二个还有点模糊。
据我所知,在interface里声明的变量为全局变量,在任何单元里都可以访问,既是说我有个
procedure可以这样写:

procedure doSomething;
begin
form1 := TForm1.create(application)
// form1是在某一单元interface内声明的TForm1的类变量
end;

也可以这样写:
procedure doSomething;
var
form1 : TForm1
//使用了局部变量,与全局变量无关
begin
form1 := TForm1.create(application)
...
form1.free
//释放对象实例
end;

另外,在第二个procedure中,我释放了form1实例,如果不释放,在离开procedure范围时,
该实例仍然存在,知道application结束,才被释放,或通过其他方式释放。

这些都是我的猜测,我说得对吗?
 
既是说,我完全可以不在interface里声明每一个窗体的类变量,可以在需要的时候再声明,
只是这样的话,我就没有一个全局的变量来引用该窗体了。
这样说对吗?
 
你的理解是对的。[:)]
 
哦,呵呵,谢谢!
我昨晚查书,看到书上说的意思好像是:即使是在interface里声明的变量,要想使用该全局变量,
也必须包含该单元文件。是这样的吗?
 
多人接受答案了。
 
后退
顶部