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