Остановите Delphi, автоматически добавляя единицы неправильно
Я обновляю наши проекты с XE7 до XE8. В настоящее время им все еще нужно будет работать с XE7, поэтому требуется несколько условий. Например, ImageList изменил единицы измерения, поэтому Vcl.ImgList - это Syste.ImageList в XE8. Чтобы заставить его работать на обеих версиях Delphi, выражение использования выглядит примерно так:
uses
System.SysUtils, System.Classes, Vcl.Controls
{$IF CompilerVersion >= 29.0}
,System.ImageList
{$else}
,Vcl.ImgList
{$endif}
,cxGraphics;
Иногда это работает нормально. Однако довольно часто Delphi автоматически повторно добавляет модуль System.Imagelist, даже если он уже есть, хотя и в условном
uses
System.SysUtils, System.Classes, Vcl.Controls
{$IF CompilerVersion >= 29.0}
,System.ImageList
{$else}
,Vcl.ImgList
{$endif}
,cxGraphics, System.ImageList;
Когда это компилируется, XE8 жалуется.
[dcc32 Error] dmImagesU.pas(13): E2004 Identifier redeclared: 'System.ImageList'
а) Почему Delphi добавляет модуль? б) Кто-нибудь знает обходной путь?
1 ответ
"Парсер", который отвечает за добавление модулей к использованию в этом случае, не учитывает должным образом директивы компилятора (эта проблема уже возникла с введением System.Actions.pas
).
Я обычно создаю фиктивный модуль для более старых версий Delphi, поэтому мне не нужно вводить какие-либо директивы в использование.
Так что в вашем случае просто создайте пустой System.ImageList.pas
и поместите это где-нибудь <= XE7 находит это.