当前位置:首页 > 网络编程 > 软件语言 > DELPHI > 通过字符串,类的引用,创建窗体。

通过字符串,类的引用,创建窗体。

点击次数:42 次 发布日期:2008-11-09 08:35:53 作者:源代码网
源代码网推荐
广告载入中

源代码网整理以下//控件单元。

源代码网整理以下{*
单元说明: 创建模式窗口,和非模式窗口的类,保证非模式窗口只创建一次。
作者 : 笔名:易 一 英文名:yeeyee
E-Mail : jane1437@163.com
创建时间: 2005年5月20日
及最后修改时间:
修改人修改时间及:
修改说明:
版权声明: 版权所有,转载请注明本人邮箱和笔名。
*}
unit ShowFormClass;

源代码网整理以下interface

源代码网整理以下uses
SysUtils, Classes,Dialogs, Forms;

源代码网整理以下type
TShowFormClass = class(TComponent)
private
{ Private declarations }
//保存要创建的窗体的类名
FFrmName:string;
//判断窗体是否存在。
function IsFormExist:boolean;
//得到窗体。
function GetExistForm:TForm;
//创建一个类
function CreateAClass(const AClassName: string): TForm;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); virtual;
destructor Destroy; override;

//创建并显示窗体。模式窗体。
procedure ShowModalForm(const AStrForm:string);overload;
procedure ShowModalForm(AFormClass:TFormClass);overload;
//创建并显示窗体。非模式窗体。
procedure ShowModalLessForm(const AStrForm:string);overload;
procedure ShowModalLessForm(AFormClass:TFormClass);overload;

源代码网整理以下 published
{ Published declarations }
end;

源代码网整理以下procedure Register;

源代码网整理以下implementation

源代码网整理以下
procedure Register;
begin
RegisterComponents("Yeeyee", [TShowFormClass]);
end; 软件开发网 www.mscto.com

源代码网整理以下constructor TShowFormClass.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;

源代码网整理以下destructor TShowFormClass.Destroy;
begin
inherited Destroy;
end;

源代码网整理以下function TShowFormClass.GetExistForm:TForm;
var
i:integer;
begin
for i := 0 to (Application.ComponentCount - 1) do
begin
if (Application.Components[i] is TForm) then
begin
//注意,关键判断这个类型名称是否存在。
if (application.Components[i] as TForm).ClassType.ClassName = FFrmName then
begin
Result:=(application.Components[i] as TForm);
exit;
end
end;
end;
end;

源代码网整理以下function TShowFormClass.IsFormExist:boolean;
var
i:integer;
begin
Result:=False;
for i := 0 to (Application.ComponentCount - 1) do
begin
if (Application.Components[i] is TForm) then
begin
//注意,关键判断这个类型名称是否存在。
if (application.Components[i] as TForm).ClassType.ClassName = FFrmName then
begin
Result:=True;
exit;
end
end;
end;
end;

软件开发网 www.mscto.com

源代码网整理以下//创建一个类
function TShowFormClass.CreateAClass(const AClassName: string): TForm;
var
LFormClass : TFormClass;
LForm: TForm;
begin
LFormClass := TFormClass(FindClass(AClassName));
LForm := LFormClass.Create(Application);
Result := LForm;
end;

源代码网整理以下//创建并显示窗体。模式窗体。传入字符串。
procedure TShowFormClass.ShowModalForm(const AStrForm:string);
var
LForm: TForm;
begin
FFrmName:=AStrForm;
LForm := CreateAClass(FFrmName);
try
LForm.ShowModal;
finally
LForm.Free;
end;
end;

源代码网整理以下//创建并显示窗体。模式窗体。传入类的引用。
procedure TShowFormClass.ShowModalForm(AFormClass:TFormClass);
begin
with AFormClass.Create(Application) do
begin
try
ShowModal;
finally
Free;
end;
end;
end;

源代码网整理以下//创建并显示窗体。模式窗体。传入字符串。
procedure TShowFormClass.ShowModalLessForm(const AStrForm:string);
var
LForm: TForm;
begin
FFrmName:=AStrForm;
//窗体不存在,则创建。
if not IsFormExist then
begin
LForm := CreateAClass(FFrmName);
LForm.Show;
end
else
begin
//存在,则得到窗体。带到最前头。
LForm:=GetExistForm;
LForm.BringToFront;
end;
end;

源代码网整理以下//创建并显示窗体。模式窗体。传入类的应用。
procedure TShowFormClass.ShowModalLessForm(AFormClass:TFormClass);
var
LForm: TForm;
begin
FFrmName:=AFormClass.ClassName;
//窗体不存在,则创建。
if not IsFormExist then
begin
LForm := CreateAClass(FFrmName);
LForm.Show;
end
else
begin
//存在,则得到窗体。带到最前头。
LForm:=GetExistForm;
LForm.BringToFront;
end;
end;

源代码网整理以下end.

源代码网整理以下//调用单元

软件开发网 www.mscto.com

源代码网整理以下procedure TMainForm.mmiAreaClick(Sender: TObject);
begin
//
YShowFormClass.ShowModalForm(TFormArea);
end;

源代码网整理以下(*

源代码网整理以下procedure TMainForm.mmiAreaClick(Sender: TObject);
begin
//
YShowFormClass.ShowModalForm("TFormArea");
end;

源代码网整理以下initialization
begin
RegisterClasses([TAboutBox,TFormArea]);
end;

源代码网整理以下finalization
begin
UnRegisterClasses([TAboutBox,TFormArea]);
end; *)

源代码网整理以下

源代码网整理以下



源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华