繁体   English   中英

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

[英]Custom component Convertion from delphi 5 to delphi 7

最近,我有机会将delphi-5代码转换为delphi-7 首先,我开始将Custom组件转换为delphi-7 delphi-7系统中编译delphi-5组件时抛出错误说明

“未声明的标识符:IFormDesigner”。

谷歌搜索之后,我知道应该将IFormDesigner替换为IDesigner 因此,在用IDesigner替换IFormDesigner并将设计代码与运行时代码分离之后,大多数组件IFormDesigner编译。 在下面的代码段进行编译时,它已成功编译。 但是当我将组件放在表单系统上时,会在以下位置抛出访问冲突错误

路径:= IDesigner(TForm(FFormOwner).Designer).GetPrivateDirectory in delphi7。

下面是我的组件代码。

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;

Designer属性的类型为IDesignerHook ,不能强制转换为IDesigner 要获得成功的希望,您需要以下形式的代码:

(FFormOwner as TForm).Designer as IDesigner

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM