Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ограничение компонентов в модулях данных в Delphi XE2

Delphi , Базы данных , Модуль данных

Заголовок:

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

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

Ответ: В Delphi XE2 были внесены изменения в модули данных. Теперь, по умолчанию, они имеют псевдо-свойство ClassGroup, которое определяет аффинность модуля данных к конкретному фреймворку (VCL или FMX) или делает его фреймворк-независимым. В результате, модуль данных принимает только компоненты, соответствующие его ClassGroup.

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

Чтобы разрешить размещение VCL компонентов в модуле данных, вам нужно установить ClassGroup на Vcl.Controls.TControl.

Подробнее об этом можно прочитать в документации по ClassGroup: https://docwiki.embarcadero.com/RADStudio/XE2/en/ClassGroup_pseudo-property_of_TDataModule

Пример кода на Object Pascal (Delphi) для изменения ClassGroup в модуле данных:

unit Unit1;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls;

type
  TForm1 = class(TForm)
    DataModule1: TDataModule;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Устанавливаем ClassGroup на Vcl.Controls.TControl для DataModule1
  DataModule1.ClassGroup := Vcl.Controls.TControl;
end;

end.

В данном примере, в процедуре FormCreate устанавливается ClassGroup для DataModule1 на Vcl.Controls.TControl, что позволяет размещать VCL компоненты в модуле данных.

Создано по материалам из источника по ссылке.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Модуль данных ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-30 13:48:34/0.0075089931488037/1