子窗体TChild嵌入应用

本文介绍了一种在Delphi中创建子窗体的方法,通过重写构造函数和覆盖CreateParams方法实现。这种方法允许窗体作为其他窗体的子元素,并调整其样式以适应不同的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unit ChildFrm;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ExtCtrls, Menus;
type
  TChildForm = class(TForm)
  private
    FAsChild: Boolean;
    FTempParent: TWinControl;
  protected
    procedure CreateParams(var Params: TCreateParams); override;  //覆盖原来窗体的方法,创建一个没有
                                                                                                  //标题和边框的窗口
    procedure Loaded; override; //设置窗体属性
  public
    constructor Create(AOwner: TComponent); overload; override; //用于创建一个普通窗体    
    constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; overload;
    //重载第一个构造器,需要传递两个参数,使窗体成为子窗口,AParent为其父窗体,如panel面板
    // The method below must be overridden to return either the main menu
    // of the form, or nil.
    
    function CanChange: Boolean; virtual;
  end;
var
  ChildForm: TChildForm;
implementation
{$R *.DFM}
constructor TChildForm.Create(AOwner: TComponent);
begin
  FAsChild := False;
  inherited Create(AOwner);
end;
constructor TChildForm.Create(AOwner: TComponent; AParent: TWinControl);
begin
  FAsChild := True;
  FTempParent := aParent;
  inherited Create(AOwner);
end;
procedure TChildForm.Loaded;
begin
  inherited;
  if FAsChild then
  begin
    align := alClient;
    BorderStyle := bsNone;
    BorderIcons := [];
    Parent := FTempParent;
    Position := poDefault;
  end;
end;
procedure TChildForm.CreateParams(var Params: TCreateParams);
Begin
  Inherited CreateParams(Params);
  if FAsChild then
    Params.Style := Params.Style or WS_CHILD;
end;
function TChildForm.CanChange: Boolean;
begin
  Result := True;
end;
end.
其它窗体继承时应注意声明:
   type
         TNewChildForm := class(TChildForm);
关闭窗体时在内存中释放它:
a.处理onclose事件,并把Action参数设为caFree
   Action := caFree ; //当关闭时释放窗体实例
b.处理ondestroy事件时把form1变量设为nil
   if    Assigned(form1)   then
       form1 := nil ;
这样可以防止Assigned()函数失败. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值