Что на самом деле делает псевдо-свойство TDataModule.ClassGroup в Delphi XE2?

Я попытался скопировать и вставить компонент из одного модуля данных в другой в Delphi XE2. Компонент был компонентом ссылки на источник данных Fast Report. Модуль данных был совершенно новым, только что созданным в ту секунду, в XE2.

У кого-то еще была такая же проблема, и он сообщил о качестве по центру, как 106369 и то же сообщение об ошибке, которое привело меня к этой загадочной записи в DocWiki.

Таким образом, модули данных теперь имеют привязку к фреймворку и псевдо-свойство только для времени разработки, которое согласно документам:

"Поскольку псевдо-свойство ClassGroup используется только в среде IDE и не является свойством, сгенерированным компилятором (следовательно," псевдо-свойством "), ClassGroup не задокументировано в сгенерированном компилятором справочнике по библиотекам. Страница, которую вы читаете, является документация для ClassGroup."

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

Как только я изменяю привязку к модулю данных, я могу вставить данные в модули данных, не вызывая у меня проблем. Слава Богу за Google-та ошибка, или я застряну.

Если он предназначен для того, чтобы помочь нам писать кроссплатформенные модули данных, и, тем не менее, он влияет только на IDE, согласно документации, это не соответствует предупреждению, которое вы получаете, когда играете с этим во время разработки, вот ошибка, которую вы получите, если вы измените Это:

 EInvalidType : The following component(s) are not available in the specified 
 class group. This is likely to cause compile or runtime errors. 
 frxDBSet.TfrxDBDataset.

Что я не вижу, так это то, как это сообщение об ошибке может быть правильным, и документация также может быть правильной.

Похоже, что предупреждения указывают на ошибки компиляции, компоновки и выполнения, если они установлены неправильно. Любопытные умы, которые хотят знать, что на самом деле происходит, хотят знать: что это за штука и почему она была добавлена ​​в модули данных в XE2. Я ожидаю, что другие люди наткнуться на эту странную функцию, с чувством, что они вступили в нечто вроде помета динозавров, и хотят знать, что с этой функцией.

Мой лучший ответ на этот момент заключается в том, что сходство модуля данных с TPersistent означает, что в языке XE2 этот модуль данных не нуждается в невизуальных элементах управления, специфичных для VCL. В будущей версии Delphi, возможно, подобный маркер позволит нам пометить формы как "очищенные от зависимостей от VCL или окон"?

Обновление 1: Исходный код.PAS вашего модуля данных хранит это псевдо-свойство таким образом, который выглядит как директива компилятора, например:

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

1 ответ

Решение

Я думаю, что это совершенно очевидно, для чего предназначено его использование, и документация, на которую вы ссылаетесь, довольно интенсивна для этой цели. Он предназначен для предотвращения размещения компонентов, предназначенных только для VCL, в доступном для FireMonkey модуле данных DataModule и наоборот. Поскольку TDataModule изначально не зависит от фреймворка, на него можно поместить только компоненты, не зависящие от фреймворка. Очевидно, что ваш исходный DataModule имеет сходство с вашим новым DataModule, поэтому копирование / вставка не будет работать, пока вы не измените сродство нового DataModule для соответствия схожести исходного DataModule.

Другие вопросы по тегам