Mega Code Archive
 
 
    
Writing TPanelForm
Title: Writing TPanelForm
Question: Making TPanel designable likewise TForm & TDataModule...
Answer:
------------------------------------------------------------
unit PanelForm;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ExtCtrls, ComCtrls;
type
 TPanelForm = class(TPanel)
 private
 FOnCreate: TNotifyEvent;
 FOnDestroy: TNotifyEvent;
 protected
 procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
 public
 constructor Create(AOwner: TComponent); override;
 constructor CreateNew(AOwner: TComponent);
 destructor Destroy; override;
 published
 property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
 property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
 end;
implementation
uses
 Consts;
procedure TPanelForm.GetChildren(Proc: TGetChildProc; Root: TComponent);
var
 I: Integer;
 OwnedComponent: TComponent;
begin
 inherited GetChildren(Proc, Root);
 if Root = Self then
 for I := 0 to ComponentCount - 1 do
 begin
 OwnedComponent := Components[I];
 if not OwnedComponent.HasParent then Proc(OwnedComponent);
 end;
end;
constructor TPanelForm.Create(AOwner: TComponent);
begin
 CreateNew(AOwner);
 if (ClassType TPanelForm) {and not (csDesigning in ComponentState)} then
 if not InitInheritedComponent(Self, TPanelForm) then
 raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);
 try
 if Assigned(FOnCreate) then FOnCreate(Self);
 except
 Application.HandleException(Self);
 end;
end;
constructor TPanelForm.CreateNew(AOwner: TComponent);
begin
 inherited Create(AOwner);
end;
destructor TPanelForm.Destroy;
begin
 if Assigned(FOnDestroy)
 then FOnDestroy(Self);
 inherited;
end;
end.
------------------------------------------------------------
unit xFormsReg;
interface
procedure Register;
implementation
uses
 DsgnIntf, Classes, PanelForm;
procedure Register;
begin
 RegisterCustomModule(TPanelForm, nil);
 RegisterClass(TPanelForm);
end;
end.
------------------------------------------------------------
package xForms;
requires
 vcl40;
contains
 PanelForm,
 xFormsReg;
end.
------------------------------------------------------------
There is no standard way to create such panel forms. Just create new form, change its ancestor from TForm to TPanelForm and press Alt+F12 two times.
Good luck !