高手请入:关于对象作参数 (20分)

  • 主题发起人 caijitao
  • 开始时间
C

caijitao

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在某个函数中打开不同的窗口。
该函数定义如下
function fu1( w1:??? );
begin
with w1.create(self) do show;
end
而w1可以是formA,formB...formN等不同的窗口对象。
每调用一次函数可打开相应的窗口对象。
这个函数应该如何写呢?


感谢cjsh,问题解决了:)
完整例子

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
public
procedure CreateSubForm(AClassName:string);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

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


procedure TForm1.CreateSubForm(AClassName: string);
begin
if GetClass(AClassName)<>nil then
with TFormClass(FindClass(AClassName)).Create(self) do
begin
ShowModal;
end;
end;

////下面的代码注册窗体类,你要注册才能用FindClass找到
initialization
RegisterClass(TForm1);

end.


 
formA,FormB .......都是从TForm继承来的,你可以这样写。
function ful(w1:TFrom)
begin
w1.create(self) do show;
end
你这样写试试看,我没法试。呵呵。
 
可以用类引用解决:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=597005
 
已解决,感谢cjsh
完整例子

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
public
procedure CreateSubForm(AClassName:string);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

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


procedure TForm1.CreateSubForm(AClassName: string);
begin
if GetClass(AClassName)<>nil then
with TFormClass(FindClass(AClassName)).Create(self) do
begin
ShowModal;
end;
end;

////下面的代码注册窗体类,你要注册才能用FindClass找到
initialization
RegisterClass(TForm1);

end.


 

Similar threads

顶部