首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从delphi 5到delphi 7的自定义组件转换

从delphi 5到delphi 7的自定义组件转换
EN

Stack Overflow用户
提问于 2015-06-04 05:26:13
回答 1查看 1K关注 0票数 0

最近,我有机会将delphi-5代码转换为delphi-7。一开始,我开始将自定义组件转换为delphi-7。在编译delphi-5组件时,delphi-7系统中存在抛出错误状态

“未声明标识符: IFormDesigner”。

在谷歌搜索之后,我意识到IFormDesigner应该被IDesigner取代。因此,在将IFormDesigner替换为IDesigner并将设计代码与运行时代码分离之后,大多数组件都被编译。在编译下面的代码时,它正在被成功编译。但是,当我将组件放在窗体系统上时,会将访问冲突错误抛到

Path:=IDesigner(TForm(FFormOwner).Designer).GetPrivateDirectory in delphi7.

下面是我的组件代码。

代码语言:javascript
复制
constructor TsampleComponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FFormOwner:=TForm(Owner);
  if not (Owner is TForm) then
    repeat
      FFormOwner:=TForm(FFormOwner.Owner);
    until (FFormOwner is TForm) or (FFormOwner.Owner=nil);

  if (csDesigning in ComponentState) then
    //Path:=IFormDesigner(TForm(FFormOwner).Designer).GetPrivateDirectory--     delphi 5 code
    Path:=IDesigner(TForm(FFormOwner).Designer).GetPrivateDirectory
  else
    Path:=ExtractFilePath(Application.EXEName);
.
.

end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-04 07:45:21

Designer属性的类型为IDesignerHook,不能硬转换为IDesigner。要有任何成功的希望,你需要这个表格的代码:

代码语言:javascript
复制
(FFormOwner as TForm).Designer as IDesigner

这将执行IDesignerHook接口Designer的运行时查询,如果确实支持该接口,则返回IDesigner接口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30635548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档