如何作一个类似“数据模块”的Form,放置一些我自定义的某一类的非可视控件?(200分)

  • 主题发起人 主题发起人 baoling
  • 开始时间 开始时间
B

baoling

Unregistered / Unconfirmed
GUEST, unregistred user!
unit CCHModule;

interface

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

type
TCCHModule = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); virtual;
destructor Destroy; override;

{ Public declarations }
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('CCH', [TCCHModule]);
end;

constructor TCCHModule.Create(AOwner: TComponent);
begin
GlobalNameSpace.BeginWrite;
try
CreateNew(AOwner);
if (ClassType <> TCCHModule) then
begin
if not InitInheritedComponent(Self, TCCHModule) then
raise EResNotFound.CreateFmt(SResNotFound, [ClassName]);

end;
finally
GlobalNameSpace.EndWrite;
end;
end;

constructor TCCHModule.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
inherited Create(AOwner);
Screen.AddForm(Self);
end;

destructor TCCHModule.Destroy;
begin
GlobalNameSpace.BeginWrite;
try
Screen.RemoveForm(Self);
inherited Destroy;
finally
GlobalNameSpace.EndWrite;
end;
end;

end.


//编译时 SResNotFound AddForm ReMoveForm说是没有声明 可为什么在forms.pas中的
TCustomForm.CreateNew中却是可用的?
 
没有那么简单,TForm, TDataModule, TFrame 这些设计时容器是需要 IDE 的内在支持的,
你要做类似的必须从 TForm,TDataModule 或 TWinControl 继承,并且利用
RegisterCustomModule 注册你的自定义容器,还需要用 Delphi 的 Open Tools API 编写
插件在设计时生成你的自定义容器,你可以到 www.torry.net 去搜索 CCPack 这个 Package,
它应该可以满足你的要求。
另, Screen 是 TScreen 的全局对象,AddForm, RemoveForm 是 TScreen 中 private
的方法,TScreen 与 TCustomForm 都在 Forms.pas 中定义,所以 TCustomForm 的方法
可以访问 TScreen 的私有方法,你的类不在 Forms.pas 中,只能访问 TScreen 的 public
部分的方法与属性。sResNotFound 在 Consts.pas 中声明,你可能没有 uses consts 这个
单元。
 
接受答案了.
 
后退
顶部