Delphi

本类阅读TOP10

·分布式网络考试系统原型分析及实现
·游戏外挂设计技术探讨①
·使用HOOK随心监视Windows
·Delphi 水晶报表打包解决
·试题库开发中非文本数据的处理
·如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题
·如何使用Delphi设计强大的服务器程序
·工人线程中关闭窗体的实现
·用DLL方式封装MDI子窗体。
·支持XP下托盘栏气球提示的托盘单元

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
通过字符串,类的引用,创建窗体。

作者:未知 来源:月光软件站 加入时间:2005-6-5 月光软件站

//控件单元。

{*
单元说明:     创建模式窗口,和非模式窗口的类,保证非模式窗口只创建一次。
作者        :     笔名:易  一    英文名:yeeyee
E-Mail     :    [email protected]
创建时间:          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;

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;

//创建一个类
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.

//调用单元

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; *)




相关文章

相关软件




月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有