加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 使用新事件创建自定义框架

发布时间:2020-12-15 09:47:38 所属栏目:大数据 来源:网络整理
导读:我正在研究delphi XE2. 我需要的: 我需要带有框架的MyFrame类,没有任何可见的组件,但是在Object Inspector中可以看到新事件.此事件将通知我的表单(将放置MyFrame对象),即f.e.框架上的所有数据都已满. 是)我有的: 基于this post和TOndrej的答案,以及Ba显示
我正在研究delphi XE2.
我需要的:
我需要带有框架的MyFrame类,没有任何可见的组件,但是在Object Inspector中可以看到新事件.此事件将通知我的表单(将放置MyFrame对象),即f.e.框架上的所有数据都已满.

是)我有的:
基于this post和TOndrej的答案,以及Ba显示的that hint,对于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 – >来创建MyFrame;新 – >其他 – >德尔福项目 – > MyFrame然后在下面显示奇怪的窗口.
当我在那里选择一些目录并单击OK按钮时,将关闭新的Delphi项目并打开我的包项目.

如果有人可以告诉我,我做错了,我会很高兴的.

解决方法

A.框架类注册

没有必要以“hacky方式”做到这一点

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 => DesignEditors

TDataModuleCustomModule => DMForm(designide.dcp)

TWinControlCustomModule => WCtlForm(designide.dcp)

TFrameModule => VCLFormContainer(vcldesigner.dcp)

我想,对于FireMonkey,它应该可以以类似的方式(找到fmxdesigner.dcp&检查记事本里面的内容)

B.要在“新建…”向导中使用它,您需要注册向导类.
如果您没有时间编写向导类,只需创建新框架然后手动替换父类名称并将相应的单元添加到“使用”列表中.就这样

PS.在较旧的Delphi版本中,单元DMDesigner中有TDataModuleDesignerCustomModule元类而不是TDataModuleCustomModule

PPS.其他现有的元类名称:

TCustomFormCustomModule

TIDESourceModuleCustomModule

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读