窗体构造 |
尚未結案
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
大大好:
我想问一个问题,就是在窗体的构造中我们一般都是
var form1:TForm1;
form1:=Tform1.creat(self); //self一般是TWincontrol 派生的对象
如果现在我要从TForm1派生一个新的窗体TForm2,form2的生命周期由一个新类控制,请问能修改构造函数的参数进行设置吗?
type TMyOwner=class(TObject) end; type TForm2 = class; TForm1 = class(TForm) Button1: TButton; GroupBox1: TGroupBox; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public procedure showmsg; end; Tform2 = class(TForm1) private FMyOwner:TMyOwner; public //************************************************* //自己写一个构造函数,不仅创建该派生的窗体,而且确定了新的一个宿主类? constructor create(AOwner:TMyOwner);??? // constructor create(AOwner: TComponent); override; // procedure init(myowner:TMyOwner); end;多学、多问、多思考 |
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
我想问一个问题,就是在窗体的构造中我们一般都是
var form1:TForm1;
form1:=Tform1.creat(self); //self一般是TWincontrol 派生的对象
如果现在我要从TForm1派生一个新的窗体TForm2,form2的生命周期由一个新类控制,请问能修改构造函数的参数进行设置吗?
====================================================
这个当然可以,这个和类的实现基本相同的原理 如下举例:
[code]
unit Unit2; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs; type
TMyForm = class(TForm)
private
{ Private declarations }
public
constructor Create(AOwner: TComponent;MyCaption:string);
{ Public declarations }
end; var
MyForm: TMyForm; implementation {$R *.dfm} constructor TMyForm.Create(AOwner: TComponent; MyCaption: string);
begin
inherited create(AOwner);
self.Caption :=MyCaption;
end; end.
[code] procedure TForm1.BitBtn1Click(Sender: TObject);
var
aF,bF: TMyForm;
begin
aF:=TMyForm.Create(nil,'One');
aF.Show ;
bF:=TMyForm.Create(nil,'Two');
bF.Show ;
end; 發表人 - sos_admin 於 2004/07/17 23:20:05
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
多谢大大启发!!
type TMyForm = class; TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public aF, bF: TMyForm; end; TMyForm = class(TForm1) private { Private declarations } public constructor Create(AOwner: TComponent; MyCaption: string); { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TMyForm } constructor TMyForm.Create(AOwner: TComponent; MyCaption: string); begin inherited create(AOwner); self.Caption := MyCaption; end; procedure TForm1.Button1Click(Sender: TObject); begin aF := TMyForm.Create(nil, 'One'); aF.Show; aF.Button2Click(nil); end; //当我点击af窗体上的button2时候,程序执行TForm1.Button2Click部分,但是af(=af.af)显示为nil,没有做释放动作 我想问大大们在派生的类里面怎么区分与基类中published部分一样的部分? procedure TForm1.Button2Click(Sender: TObject); begin if assigned(af) then af.Free; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |