我正在研究delphi XE2
我需要什么:
我需要带有框架的MyFrame类,没有任何可见的组件,但是在Object Inspector中可以看到新事件。此事件将通知我的表单(将放置MyFrame对象),即f.e.框架上的所有数据都已满了。
我有什么:
基于this post和TOndrej的答案,以及that hint,其中Ba表示,对于XE2我们需要替换
delphivclide := GetModuleHandle('delphivclide160.bpl');
用这个:
delphivclide := GetModuleHandle('vcldesigner160.bpl');
我有新框架的代码:
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.
注册单位的代码:
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.
当我构建我的软件包时,我收到了我在这里的消息,所以我认为MyFrame已经注册。
我的问题是什么:
问题是,它最终没有发挥作用
当我选择New VCL Application时,想要通过选择File - &gt;创建MyFrame;新 - &gt;其他 - &gt;德尔福项目 - &gt; MyFrame然后在下面显示了奇怪的窗口
当我在那里选择一些目录并单击OK按钮时,将关闭新的Delphi项目并打开我的包项目。
如果有人可以告诉我,我做错了,我会很高兴。
答案 0 :(得分:2)
:一种。框架类注册
没有必要采用&#34; hacky方式&#34;
uses
...
DMForm,
VCLFormContainer,
...
procedure Register;
begin
...
RegisterCustomModule(TYourFrameClass, TFrameModule); // for frames
RegisterCustomModule(TYourModuleClass, TDataModuleCustomModule); // for data modules
...
end;
还有另一种方法可以添加帧
type
TNestableWinControlCustomModule = class (TWinControlCustomModule)
public
function Nestable: Boolean; override;
end;
function TNestableWinControlCustomModule.Nestable: Boolean;
begin
Result := True;
end;
+
RegisterCustomModule(TYourFrameClass, TNestableWinControlCustomModule);
单位名称(在XE7中测试):
TCustomModule =&gt;的 DesignEditors 强>
TDataModuleCustomModule =&gt; DMForm (designide.dcp)
TWinControlCustomModule =&gt; WCtlForm (designide.dcp)
TFrameModule =&gt; VCLFormContainer (vcldesigner.dcp)
我认为对于 FireMonkey ,它应该可以类似的方式(找到 fmxdesigner.dcp &amp;检查Notepad ++中的内容)
<强> B中。在内部使用它&#34;新...&#34;向导您需要注册向导类。 如果您没有时间编写向导类,只需创建新框架,然后手动替换父类名称 并将适当的单位添加到&#34;使用&#34;名单。那就是
PS。在较旧的Delphi版本中,单位 DMDesigner
中有TDataModuleDesignerCustomModule元类而不是TDataModuleCustomModulePPS。其他现有的元类名称:
TCustomFormCustomModule
TIDESourceModuleCustomModule