发信人: gzamigo(gzamigo)
整理人: teleme(2001-02-17 12:09:44), 站内信件
|
soaringbird:
你好!
非常感谢你的回答.
是这样的,我想通过f1,f2上的Button去关闭自身.但当同时打开两个f1时(当然name不同),出错.
如下,按两次Win_Main两次创建两个Frame窗口,然后点击自身Button去关闭自身.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls,Unit3;
type
TWin_Main = class(TForm)
Button1: TButton;
MainPanel: TPanel;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Win_Main: TWin_Main;
NewFrameCreating, FrameDestroying: boolean;
FrmHandling :int64 =0;
implementation
{$R *.DFM}
procedure TWin_Main.Button1Click(Sender: TObject);
begin
ShowTestFrame;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TBaseFrame = class(TFrame)
private { Private declarations }
protected
procedure FormCreate(Sender: TObject); virtual;
procedure FormClose(Sender: TObject); virtual;
procedure FormDestroy(Sender: TObject); virtual;
public { Public declarations }
procedure Close;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
{$R *.DFM}
uses Unit1;
{ TBaseFrame }
procedure TBaseFrame.Close;
var CanClose: boolean;
begin
self.Destroy;
end;
constructor TBaseFrame.Create(AOwner: TComponent);
var
BaseFrame: TBaseFrame;
begin
NewFrameCreating := true;
try
inherited;
Inc(FrmHandling);
Name := 'Frame' + IntToStr(FrmHandling);
Parent := Win_Main.MainPanel;
BaseFrame := Self;
Align := alClient;
FormCreate(Self);
Tag := Self.Handle;
finally
NewFrameCreating := false;
end;
end;
destructor TBaseFrame.Destroy;
var i: integer;
BaseFrame: TBaseFrame;
begin
FrameDestroying := true;
try
FormClose(Self);
FormDestroy(Self);
inherited;
finally
FrameDestroying := false;
end;
end;
procedure TBaseFrame.FormClose(Sender: TObject);
begin
//虚函数
end;
procedure TBaseFrame.FormCreate(Sender: TObject);
begin
//虚函数
end;
procedure TBaseFrame.FormDestroy(Sender: TObject);
begin
//虚函数
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Unit2, StdCtrls;
procedure ShowTestFrame;
type
TTestFrame = class(TBaseFrame)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
TestFrame: TTestFrame;
implementation
{$R *.DFM}
procedure ShowTestFrame;
begin
TTestFrame.Create(Application);
end;
procedure TTestFrame.Button1Click(Sender: TObject);
begin
inherited;
close;
end;
end. |
|