最近,我有机会将delphi-5代码转换为delphi-7。一开始,我开始将自定义组件转换为delphi-7。在编译delphi-5组件时,delphi-7系统中存在抛出错误状态
“未声明标识符: 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;发布于 2015-06-04 07:45:21
Designer属性的类型为IDesignerHook,不能硬转换为IDesigner。要有任何成功的希望,你需要这个表格的代码:
(FFormOwner as TForm).Designer as IDesigner这将执行IDesignerHook接口Designer的运行时查询,如果确实支持该接口,则返回IDesigner接口。
https://stackoverflow.com/questions/30635548
复制相似问题