程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 通過字符串,類的引用,創建窗體

通過字符串,類的引用,創建窗體

編輯:Delphi
 //控件單元。

  {*
  單元說明:     創建模式窗口,和非模式窗口的類,保證非模式窗口只創建一次。
  作者        :     筆名:易  一    英文名: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; *)

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved