自定义组件从 delphi 5 转换为 delphi 7

Custom component Convertion from delphi 5 to delphi 7

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

"Undeclared identifier: IFormDesigner".

谷歌搜索后我才知道 IFormDesigner 应该替换为 IDesigner。因此,在将 IFormDesigner 替换为 IDesigner 并将设计代码与运行时代码分开后,大部分组件都得到了编译。在编译下面的代码时,它已成功编译。但是当我将组件放在表单系统上时,系统会在

处抛出访问冲突错误

Path:=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 和 return IDesigner 接口的运行时查询(如果确实支持该接口)。