精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>图形界面和窗体>>Re:如何关闭及释放由TFrame继承的Frame窗口??

主题:Re:如何关闭及释放由TFrame继承的Frame窗口??
发信人: 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.

[关闭][返回]