Подтвердить что ты не робот

Модуль данных Delphi XE2 ожидает только компонентов базы данных?

В предыдущих версиях Delphi я использовал модуль данных (TDataModule) в качестве места для хранения невизуальных компонентов, чтобы избежать загромождения основной формы. В Delphi XE2, когда я создаю новый модуль данных, он позволяет мне размещать в нем компоненты, связанные с базой данных (например, TADOConnection и TDataSource). Почему это и как я могу поместить в него другие компоненты? Есть ли альтернатива?

4b9b3361

Ответ 1

Модули данных изменены с выпуском XE2. Помните, что XE2 представила новую компоненту FireMonkey в дополнение к давнему VCL. В модули данных добавлено новое псевдо-свойство с именем ClassGroup. Это определяет, какие компоненты могут быть добавлены в модуль данных в дизайнере IDE.

По умолчанию ClassGroup для модуля данных System.Classes.TPersistent. Это указывает, что модуль данных нейтрален каркасом и поэтому не принимает ни компонентов VCL, ни компонентов FMX.

В вашем случае вы, вероятно, хотите принять компоненты VCL, поэтому вам нужно указать ClassGroup Vcl.Controls.TControl.

Читайте все о ClassGroup в документации .

System.Classes.TDataModule и его классы-потомки, такие как Web.HTTPApp.TWebModule, имеют псевдо-свойство с именем ClassGroup, которое делает следующее:

  • Определяет сродство к модулю данных. То есть ClassGroup указывает, что модуль данных является либо нейтральным, либо нейтральным или должен работать с определенной структурой (а именно VCL или FMX).
  • Включает не зависящие от структуры компоненты в палитре инструментов. Вы должны установить значение, специфичное для платформы для ClassGroup, в Инспектор объектов, чтобы включить нестандартный такие компоненты, как:
    • TActionList - только VCL, и поэтому для включения TActionList в палитре инструментов вы должны установить ClassGroup в настройку VCL.
    • TTimer существует как в FMX, так и в VCL. Чтобы включить TTimer для правильной структуры, вы должны установить ClassGroup в FMX или VCL, чтобы соответствуют структуре родительского приложения. (TTimer и TActionList далее рассматриваются в этом разделе.)

Ответ 2

Это (багги) поведение в

unit Unit2;

interface

uses
  System.SysUtils, System.Classes;

type
  TDataModule2 = class(TDataModule)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DataModule2: TDataModule2;

implementation

{%CLASSGROUP 'System.Classes.TPersistent'}

{$R *.dfm}

end.

вызвана линией

{%CLASSGROUP 'System.Classes.TPersistent'}

Чтобы избавиться от просто удалить или изменить строку в

{.%CLASSGROUP 'System.Classes.TPersistent'}

После перехода на Design View вы увидите все компоненты, как вы ожидаете.

(Delphi XE2 16.0.4504.48759)