Qua*_*sik 5 ide delphi components delphi-xe2
我正在研究delphi XE2.
我需要的是:
我需要带有框架的MyFrame类,没有任何可见的组件,但是在Object Inspector中可以看到新的事件.此事件将通知我的表单(将放置MyFrame对象),表示框架上的所有数据都已满.
我有什么:
根据这篇文章和TOndrej的答案,以及Ba 提示的那个提示,对于XE2,我们需要更换
delphivclide := GetModuleHandle('delphivclide160.bpl');
Run Code Online (Sandbox Code Playgroud)
有了这个:
delphivclide := GetModuleHandle('vcldesigner160.bpl');
Run Code Online (Sandbox Code Playgroud)
我有新框架的代码:
unit MyFrame;
interface
uses
System.Classes, Vcl.Forms;
type
TMyFrame = class(TFrame)
private
protected
FOnFilledData : TNotifyEvent;
public
published
property OnFilledData : TNotifyEvent read FOnFilledData write FOnFilledData;
end;
implementation
end.
Run Code Online (Sandbox Code Playgroud)
注册单位的代码:
unit MyFrameReg;
interface
procedure Register;
implementation
uses Windows, DesignIntf, Dialogs, wFrame;
procedure Register;
var
delphivclide: THandle;
TFrameModule: TCustomModuleClass;
begin
delphivclide := GetModuleHandle('vcldesigner160.bpl');
if delphivclide <> 0 then
begin
TFrameModule := GetProcAddress(delphivclide, '@Vclformcontainer@TFrameModule@');
if Assigned(TFrameModule) then
begin
ShowMessage('I''m here');
RegisterCustomModule(TMyFrame, TFrameModule);
end;
end;
end;
end.
Run Code Online (Sandbox Code Playgroud)
当我构建我的包时,我收到了我在这里的消息,所以我说,MyFrame已注册.
我的问题
是什么:问题是,它最终无法发挥作用.
当我选择New VCL Application时,想要通过选择File - > New - > Other - > Delphi Projects - > MyFrame来创建MyFrame,然后在下面显示一个奇怪的窗口.
当我在那里选择一些目录并单击OK按钮时,将关闭新的Delphi项目并打开我的包项目.

如果有人可以告诉我,我做错了,我会很高兴的.
A. 框架类注册
没有必要用“hacky way”来做这件事
uses
...
DMForm,
VCLFormContainer,
...
procedure Register;
begin
...
RegisterCustomModule(TYourFrameClass, TFrameModule); // for frames
RegisterCustomModule(TYourModuleClass, TDataModuleCustomModule); // for data modules
...
end;
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以添加框架
type
TNestableWinControlCustomModule = class (TWinControlCustomModule)
public
function Nestable: Boolean; override;
end;
function TNestableWinControlCustomModule.Nestable: Boolean;
begin
Result := True;
end;
Run Code Online (Sandbox Code Playgroud)
+
RegisterCustomModule(TYourFrameClass, TNestableWinControlCustomModule);
Run Code Online (Sandbox Code Playgroud)
单元名称(在XE7中测试):
TCustomModule =>设计编辑器
TDataModuleCustomModule => DMForm (designide.dcp)
TWinControlCustomModule => WCtlForm (designide.dcp)
TFrameModule => VCLFormContainer (vcldesigner.dcp)
我想对于FireMonkey应该可以以类似的方式(找到fmxdesigner.dcp并检查 Notepad++ 中的内容)
B. 要在“新建...”向导中使用它,您需要注册向导类。如果您没有时间编写向导类,只需创建新框架,然后手动替换父类名称并将适当的单元添加到“使用”列表中。就这样
附言。在较旧的 Delphi 版本中, DMDesigner单元中存在 TDataModuleDesignerCustomModule 元类,而不是 TDataModuleCustomModule
聚苯硫醚。其他现有元类名称:
TCustomForm自定义模块
TIDESourceModule自定义模块