2013-12-20 6 views
1

Как и при попытке переместить компоненты в более новые версии Delphi, Borland breaks compatibility by renaming, hiding, or removing various classes used by design time code.Что делать с ExptIntf и ToolIntf и TIExpert?

Сегодняшний случай включает библиотеку кода, которую мы купили много лет назад, для которой у нас исходный код. Попытка установить пакет «время разработки» в Delphi 7 IDE терпит неудачу, когда блок ExptIntf не найден:

uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    Contoso3Const, StdCtrls, ExtCtrls, ContosoRpt, DBTables, ContosoDataWz, ContosoExtra, 
    ExptIntf, 
    ToolIntf, ContosoWizard, ActiveX; 

Нет проблем. Мы прокомментируем ссылку. Но тогда другой блок, ToolIntf не найден:

uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    Contoso3Const, StdCtrls, ExtCtrls, ContosoRpt, DBTables, ContosoDataWz, ContosoExtra, 
    //ExptIntf, 
    ToolIntf, 
    ContosoWizard, ActiveX; 

Нет проблем. Мы прокомментируем ссылку. Это когда начинается настоящее веселье.

Класс TIExpert не найден:

{$INCLUDE compilers.inc} 

uses 
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
    Contoso3Const, StdCtrls, ExtCtrls, ContosoRpt, DBTables, ContosoDataWz, ContosoExtra, 
    {$IFDEF DELPHI_6_UP} 
    //They've been removed in D6 
    //ExptIntf, ToolIntf, 
    {$ELSE} 
    ExptIntf, ToolIntf, 
    {$ENDIF} 
    ContosoWizard, ActiveX; 

type 
    TContosoIDEWizard = class(TIExpert) 
    public 
    ... 

Быстрый поиск в Google говорит, что the code will never work in Delphi 6:

Это старый стиль OTA, который амортизируется в Д4 и ушел в D6. Вам нужно будет написать , используя стиль интерфейса OTA, введенный в D4.

В плакате не упоминается, какой новый стиль интерфейса OTA представлен в D4.

Учитывая, что я собираюсь придется повторно написать два класса в коде 3 партии:

TContosoIDEWizard = class(TIExpert) 
    public 
    SourceBuffer: PChar; 
    function GetName: string; override; 
    function GetComment: string; override; 
    function GetGlyph: HICON; override; 
    function GetStyle: TExpertStyle; override; 
    function GetState: TExpertState; override; 
    function GetIDString: string; override; 
    function GetAuthor: string; override; 
    function GetPage: string; override; 
    procedure Execute; override; 
    function CreateForm(Report : TCustomContosoRep; const FormIdent : string; VarList : TStrings) : TMemoryStream; 
    function CreateSource(const UnitIdent, FormIdent: string; VarList : TStrings): TMemoryStream; 
    end; 

    TNewContosoReport = class(TIExpert) 
    function GetName: string; override; 
    function GetComment: string; override; 
    function GetGlyph: HICON; override; 
    function GetStyle: TExpertStyle; override; 
    function GetState: TExpertState; override; 
    function GetIDString: string; override; 
    function GetAuthor: string; override; 
    function GetPage: string; override; 
    function GetMenuText: string; override; 
    procedure Execute; override; 
    end; 

что же переписывают их в? Я предполагаю, что это так же просто, как использование другого имени базового класса, который содержит все те же методы, и никакой реальной перезаписи кода (кода, который я не писал) потребуется.

Примечание: Идентичность библиотеки 3-й партии было плохо затемненный для вашей безопасности

Примечание:

  • Tagged delphi-5; поскольку это IDE, я перехожу от
  • С меткой delphi-7; поскольку это IDE, я перехожу к
  • с тегом delphi-6; как это IDE, который сломал функционирующий код
  • Tagged delphi, как это инструмент развития, мы говорим о
+3

Это ** очень ** старый API и считался устаревшим во время D7. Новый старый код 'использует ToolsAPI'. –

+3

«Рутинное отсутствие обратной совместимости»?Это произошло один раз (когда Unicode был добавлен с D2009). Изменения, которые вы упомянули, не были «обычными», и были объявлены две версии заранее (D4-> D6) и задокументированы. Borland долгое время не занималась Delphi. Если вы собираетесь жаловаться, по крайней мере, жалуйтесь на фактические вопросы. :-) (Это не имеет особого смысла, однако, когда ваша жалоба заключается в том, чтобы перейти от продукта Y2K к продукту ~ 2002 года, которому еще более десяти лет. Я уверен, что люди переходят с 16-разрядной версии Win 3.1 на Win 95 сегодня тоже имеет дело с серьезными проблемами.) :-D –

+1

@ Я не могу поверить, что вы, наконец, покидаете Delphi 5 и переходите в новое время. О, подождите ..... ;-) –

ответ

4

TIExpert была заменена новой иерархии интерфейсов, полученных от IOTAWizard. Существует множество обучающих программ API OpenTools в Интернете, таких как this one, а также official documentation.

+0

К сожалению, официальная документация сосет. –

+1

Вы действительно прочитали документацию, к которой я привязался? Это достаточно основательно, что да, нельзя сказать о многих других областях документации. Но документация OTA содержит много информации и образцов. –

+0

Хм. Страница, с которой вы связаны, в порядке. Но OTA ужасно документировано. Большинство методов - «Котел-плита Embarcadero Technologies в настоящее время не имеет больше информации». –