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

瓜浓

瓜浓

2016-02-19 19:57

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享通过字符串,类的引用,创建窗体的教程,热爱PS的朋友们快点看过来吧!

  //控件单元。

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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

  

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
通过字符串,类的引用,创建窗体

字符串类数据列类型(参考)

编程语言 网络编程
字符串类数据列类型(参考)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL中自己创建函数,分割字符串

编程语言 网络编程
SQL中自己创建函数,分割字符串

字符串分割

编程语言 网络编程
字符串分割

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

STL 字符串类与 UNICODE 及其它......

C语言教程 C语言函数
STL 字符串类与 UNICODE 及其它......

创建任意长度重复字符串的简洁方法

编程语言 网络编程
创建任意长度重复字符串的简洁方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用Delphi编写系统进程监控程序

用Delphi编写系统进程监控程序

DW2004 中文乱码解决方案

DW2004 中文乱码解决方案
下拉加载更多内容 ↓