Mega Code Archive

 
Categories / Delphi / Forms
 

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 !