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

2016-02-19 19:57 9 1 收藏

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

【 tulaoshi.com - 编程语言 】

  //控件单元。

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

  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;
  

  (*

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

  procedure TMainForm.mmiAreaClick(Sender: TObject);
  begin
    //
    YShowFormClass.ShowModalForm('TFormArea');
  end;

  initialization                            
  begin
    RegisterClasses([TAboutBox,TFormArea]);
  end;

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

  finalization
  begin
    UnRegisterClasses([TAboutBox,TFormArea]);
  end; *)

  

  

来源:http://www.tulaoshi.com/n/20160219/1622385.html

延伸阅读
标签: MySQL mysql数据库
  对于针对字符串位置的操作,第一个位置被标记为1。 ASCII(str) 返回字符串 str 的最左面字符的ASCII代码值。 如果 str 是空字符串,返回 0 。如果 str 是 NULL ,返回 NULL 。 mysql select ASCII('2'); - 50mysql select ASCII(2); - 50mysql select ASCII('dx'); - 100 也可参见ORD()函...
标签: Web开发
大字符串的连接最好使用数组,把每个子串放入数组元素,再执行join()连接起来,其效率比+=有明显的提高。 因此,可以由此原理写一个简单的 StringBuffer 类,在遇到大字符串连接时可以派上用场。 //by misshjn function StringBuffer(){    this.data = []; } StringBuffer.prototype....
答:import java.util.*; class test { public static void main(String[] args) { String str1="001,002,003,004,006",str2 = "001,002,005"; String str=""; TreeSet ts = new TreeSet(); StringTokenizer st = new StringTokenizer(str1,","); while (st.hasMoreTokens()) { ts.add(st.nextToken()); } st = new StringToken...
标签: Web开发
去掉字符串中匹配 的字符串 代码如下: /** * 去掉字符串中匹配 的字符串 * * @author zhujie * @return String regex 要替换的内容 value 字符串 state 替换的内容变成什么 */ public static String toRegex(String regex, String value, String state) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(value); String...
标签: Web开发
a href="1.htm"251/a 怎么用JS把251替换为 span style='background-color: #99FF99'251/span [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

经验教程

83

收藏

54
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部