如何写一个通用的调用窗体过程?(100分)

  • 主题发起人 主题发起人 allenzen
  • 开始时间 开始时间
A

allenzen

Unregistered / Unconfirmed
GUEST, unregistred user!
如何写一个通用的调用窗体过程?
在一个Project中有许多子窗体,如Form1,Form2,Form3......
我想在主窗口中写一个通用的调用过程。

如何做? 谢谢!
 
Application.CreateForm(TForm1,Form1);
 
procedure FormShowModal(AForm:TForm);
begin
AForm.ShowModal;
end;
 
同意楼上。
 
为什么要在主窗口中写一个通用的调用过程呢?
 
我用了很多的Frame,所以在窗体内要动态创建和释放。

我写了这样一个方法
Function CallModule(M:TFrame):Boolean

但是我在调用的时候CallModule(Frame102)时,就不能通过,类型不一致!

 
TFrame?
你定义的框架吗?(常用控件的集合)
那可不是窗体....
 
是,我知道它不是窗体。但原理都是一样的。

我记得以前想过类似的一个过程,但怎么想不起来了。拉兄弟一把。
 
procedure CreateModalForm(aFormClass: TFormClass);
begin
with aFormClass.Create( Self ) do
begin
ShowModal;
Free;
end;
end;

调用时 CreateModalForm( TForm2 )
 
我的本意是这样。在一个项目中有一个主窗体,其余的都是Frame,(以前我使用的是MDI,但是这个东东不好玩)
楼上所写的过程是显示一个 模式窗体,这样破坏了操作上的整合性。(如我把数据导航栏和其它相关公用按钮
都放在了主窗体。
我声明了每个Frame的变量,(DELPHI在Frame中不会像FORM一样生成该FROM的变量)
我想像中的过程是这样的
Function CallMudle(M:TFrame; Mvar:Frame的变量):Boolean
begin
if Mvar <> Nil then
begin
try
Mvar := M.create(Application)
Mvar.parent := frmMain;
Mvar.show;
except
result := False;
exit
end else
begin
Mvar.Show;
end
end;
这个过程只是我的想像中,目的是想告诉大家我的思路。
有更好的想法,麻烦告诉小弟!
谢谢!
 
反正都是条语句
 
帮忙看看吧。!!!
 
ha ha ha .....
NND!
=====================
A constructor can be called using a variable of a class-reference type.
This allows construction of objects whose type isn? known at compile time.
For example,

type TControlClass = class of TControl;
function CreateControl(ControlClass: TControlClass;

const ControlName: string; X, Y, W, H: Integer): TControl;
begin
Result := ControlClass.Create(MainForm);
with Result do
begin
Parent := MainForm;
Name := ControlName;
SetBounds(X, Y, W, H);
Visible := True;
end;
end;

The CreateControl function requires a class-reference parameter to
tell it what kind of control to create. It uses this parameter to
call the class? constructor.
Because class-type identifiers denote class-reference values,
a call to CreateControl can specify the identifier of the class
to create an instance of. For example,

CreateControl(TEdit, 'Edit1', 10, 10, 100, 20);

Constructors called using class references are usually virtual.
The constructor implementation activated by the call depends
on the runtime type of the class reference.
 
There have a example:
========================
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
Instance: TComponent;
begin
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;
if (FMainForm = nil) and (Instance is TForm) then
begin
TForm(Instance).HandleNeeded;
FMainForm := TForm(Instance);
end;
end;
=============================
 
看看这个有没有参考价值:
procedure TfmMain.DispForm(var aForm; aFormClass: TFormClass; aOwner:TObject);
begin
if TForm(aForm) <> nil then
begin
TForm(aForm).BringToFront;
end else
begin
TForm(aForm) := aFormClass.Create(TWinControl(aOwner));
with TForm(aForm) do
begin
Parent := TWinControl(aOwner);
Align := alClient;
Show;
end;
end;
end;
调用:
DispForm(fmInvoke, TfmInvoke, aParent)
 
多人接受答案了。
 
后退
顶部