用 RzPageControl1 标签页创建的窗口,如何关闭

诸葛不亮2909 2021-04-20 07:11:44
我用 RzPageControl 动态创建 RzTabSheet1 (Caption= '主体模板'),然后把窗口 Form1 放在 RzTabSheet1 里,如下图1, 但在关闭Form1 窗口时(点击 “退出”按钮),RzTabSheet1 不会自动关闭,应该如何在关闭窗口时,同时注销 RzTabSheet1 ? 请大神指点下

图一


图二
...全文
649 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
诸葛不亮2909 2021-04-21
  • 打赏
  • 举报
回复
引用 5 楼 天行归来 的回复:
可以用消息,在Form1里通知主窗体进行销毁Form1和对应的TRzTabSheet。
可以具体点吗?谢谢!
天行归来 2021-04-21
  • 打赏
  • 举报
回复
可以用消息,在Form1里通知主窗体进行销毁Form1和对应的TRzTabSheet。
天行归来 2021-04-21
  • 打赏
  • 举报
回复
引用 6 楼 qq_38118026 的回复:
[quote=引用 5 楼 天行归来 的回复:]可以用消息,在Form1里通知主窗体进行销毁Form1和对应的TRzTabSheet。
可以具体点吗?谢谢![/quote]

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RzTabs, StdCtrls;

type
  TFmMain = class(TForm)
    RzPageControl1: TRzPageControl;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure OnCloseSheet(var msg: TMessage); message WM_USER+100;
  public
    { Public declarations }
  end;

var
  FmMain: TFmMain;

implementation

uses Unit2;

{$R *.dfm}

procedure TFmMain.OnCloseSheet(var msg: TMessage);
var
  i: integer;
  sheet: TRzTabSheet;
begin
  sheet := nil;
  for i:=0 to RzPageControl1.PageCount-1 do
  begin
    if RzPageControl1.Pages[i].tag=msg.WParam then
    begin
      sheet := RzPageControl1.Pages[i];
      break;
    end;
  end;
  if sheet<>nil then sheet.Free;
end;

procedure TFmMain.Button1Click(Sender: TObject);
var
  sheet: TRzTabSheet;
begin
  if Form1<>nil then
  begin
    //TODO 激活Form1 对应的Sheet
    exit;
  end;

  sheet := TRzTabSheet.Create(RzPageControl1);
  sheet.PageControl := RzPageControl1;
  sheet.Parent := RzPageControl1;

  Form1 := TForm1.Create(sheet);
  Form1.Parent := sheet;
  Form1.Align := alClient;

  sheet.Caption := Form1.Caption;
  sheet.Tag := Form1.Handle;
  Form1.Show;
  RzPageControl1.ActivePage := sheet;
end;

end.


unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMessage(Application.MainForm.Handle,WM_USER+100,Handle,0);
  Form1 := nil;
end;

end.


BlueStorm 2021-04-20
  • 打赏
  • 举报
回复
unit UnitMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  RzTabs, Vcl.StdCtrls;

type
  TFormMain = class(TForm)
    RzPageControl1: TRzPageControl;
    TabSheet系统导航: TRzTabSheet;
    procedure FormCreate(Sender: TObject);
  private
    RzTabSheet1: TRzTabSheet;
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

uses unit1;

procedure TFormMain.FormCreate(Sender: TObject);
begin
  RzTabSheet1 := TRzTabSheet.Create(RzPageControl1);
  RzTabSheet1.PageControl := RzPageControl1;
  RzTabSheet1.Caption := '主体模板';
  RzTabSheet1.TabVisible := TRUE;
  RzPageControl1.ActivePage := RzTabSheet1;
  Form1 := TForm1.Create(RzTabSheet1); //指定Form1的Owner是RzTabSheet1
  Form1.Parent := RzTabSheet1;
  Form1.Align := alClient;
  Form1.Show;
end;

end.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.Parent.Free;
end;

end.
BlueStorm 2021-04-20
  • 打赏
  • 举报
回复
Form1 := TForm1.Create(RzTabSheet1); //指定Form1的Owner为RzTabSheet1, 使得RzTabSheet1释放时会自动释放Form; 在Form1的“退出”按钮的事件处理程序: procedure TForm1.ButtonExitClick(Sender: TObject); begin Self.Parent.Free; end
tanqth 2021-04-20
  • 打赏
  • 举报
回复
你加载窗体时,一定会是把窗体放到RzPageControl 里的,所以RzPageControl 就是窗体的父。 那么,在你关闭窗体前先查找窗体的父级控件,如果是RzPageControl ,就关闭他。
诸葛不亮2909 2021-04-20
  • 打赏
  • 举报
回复
补充:我用的语言是 Delphi 7

16,746

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧