请问从Delphi5.0下做的程序,在Delphi6.0的环境下要做哪些修改。越详细越好,最好面面俱到。谢谢!

解决方案 »

  1.   

    被重命名的 DsgnIntf 及其相关变化在你的工程中对 DsgnIntf 的引用应该被改变为新的 Delphi 6 名称,DesignIntf。你也许也会需要添加DesignEditors,VCLEditors 和 RTLConsts 到你的 uses 子句。你也将需要添加 designide 到你的包的requires 列表。对 dsnide50 的引用可能也应该变为 designide,如果那没有被 Delphi 自动改变的话。任何使用 IDesigner 的运行时包需要使用 IDesignerHook 来避免运行时需要 designide。在运行时代码里,IDesignerHook 应该足够。设计时代码可以使用 IDesigner,但是应该使用类似下面的代码来从 IDesignerHook 的一个实例获得实际 IDesigner 接口。var
      RealDesigner: IDesigner;
    ...
    SomeDesignerHook.QueryInterface(IDesigner,RealDesigner);
    ...
    IDesignerHook 仅要求 Classes 和 Forms 单元可用。IDesigner 需要 DesignIntf,后者包含了许多其它包,而其中一些可能不是可重新分发的。组件编辑器的变化类 TComponentEditor 在 Delphi 6 里有不同的祖先系。在 Delphi 5 里,它从 TInterfacedObject 继承;现在它从一个新的类 TBaseComponentEditor 继承。类 TComponentEditorClass 现在也是 TBaseComponentEditor 而不是 TComponentEditor 的一个类。这些层次体系上的变化会要求你修改你的旧的 Delphi 工程。TDesignWindow 的变化关于类 TDesignWindow,存在大量变化。它已经被移动到 DesignWindows 单元,并且它的 FormClosed 方法已经被 DesignerClosed 替代。过去,你可以通过使用 AForm 参数在 FormClosed 里获得对表单的访问。现在,在 DesignerClosed 里,你必须使用 Designer 的 Root 属性来访问表单。在 FormClosed 里,你可以通过调用 TDesignerSelectionList.Create 或 TComponentList.Create 创建选择列表。为在 DesignerClosed 里创建选择列表,你必须使用一个 IDesignerSelections 接口。你可以使用CreateSelectionList 函数创建一个。SelectionClosed 方法的参数也和 Delphi 5 里不一样。 VCL 包的变化某些 VCL 相关的包的内容已经被重新分发到其它包。如果你在你的工程里引用 vcl50.dcp,你将需要将那些引用改变为指向其它单元,诸如 vcl.dcp 和 rtl.dcp。OpenGL 接口单元移到 rtl.dcp 中Borland OpenGL 接口单元(opengl.dcu)是 Delphi 5 Lib 文件夹里的独立单元。在 Delphi 6 中,它已经被集成到 rtl.dcp 里。对于移植到 Delphi 6 中的 Delphi 5 工程,这会导致某些问题。这里有个例子。在一个 Delphi 5 工程里,通过放置同名的单元在你的工程路径的某个地方,你有可能做出一个工程特定的对 OpenGL 单元的覆盖。Delphi 6 中使用的同一方法也导致在使用 rtl.dcp 组件中出现许多名称冲突。现在需要名称上的改变。某些类型从 HTTPApp.pas 移动到 HTTPProd.pas 中HTTPApp 单元里的数个类型已经被移动到 HTTPProd 单元里。它们是 THTMLBgColor,THTMLAlign和THTMLVAlign。如果你的工程使用这些单元中的任何一个,你应当改变你的 uses 语句来指向 HTTPProd 而不是HTTPApp。Search 单元被删除,SearchBuf 例程被移动和改变单元 Search 不再存在于 Delphi 6 中。SearchBuf,这个在一个本文缓冲区内定位一个子字符串的例程,已经被移动到 StrUtils 单元;且它的参数已经变化了。最后的参数是一个 TStringSearchOptions 对象。如果你的工程因为编译器不能找到 Search 单元而不能编译,那么改变你的 uses 语句来包含 StrUtils 而不是Search。你也将需要检查你的 SearchBuf 调用以确保你的参数匹配新的语法。