Estou criando dois data modules no Delphi 2007: TDMConexao e TDMBasico.
   O TDMConexao possui somente um componente TSQLConnection, com
código no evento OnCreate pra conectar com a base de dados usando o
nome de um arquivo que será informado numa propriedade Published do
mesmo (TDMConexao).
   O TDMBasico contém somente um TClientDataSet. Este data module não
tem propriedades Published.
   Pesquisando na web, encontrei códigos de como registrar as classes
para que os data modules derivados exibissem as propriedades Published
no Objetc Inspector. Sendo assim, criei um pacote e adicionei as units
dos dois data modules (TDMConexao e TDMBasico), além de criar uma nova
unit responsável por registrar as classes. Esta unit ficou assim:

unit FormPropReg;

interface

procedure Register;

implementation

uses
 DesignIntf, DMForm, DMConexao, DMBasico;

procedure Register;
begin
 // DataModules
 RegisterCustomModule(TDMConexao, TDataModuleCustomModule);
 RegisterCustomModule(TDMBasico, TDataModuleCustomModule);
end;

end.

   Após compilar e instalar o pacote, adicionei os dois data modules
ao repositório de objetos, para poder usá-los em outros projetos,
criando novos data modules (opção inherited).
   Mas (sempre tem um mas...), quando fui testar, pra minha surpresa,
quando crio um data module em File->New->Other selecionando o
TDMConexao ou o TDMBasico presentes no repositório, usando a opção
inherited, os componentes presentes no data module ancestral não
aparecem, ou seja, o novo data module fica vazio, sem componente
algum. Entretanto, a propriedade Published do TDMConexao é exibida no
Object Inspector. Caso eu use a opção copy ou use ao criar o data
module, daí fica tudo normal, como deveria ser.
   Acredito que o procedimento que registra a classe dos data modules
esteja incorreto, já estou há alguns dias pesquisando uma solução e
não encontro. Agradeceria muitíssimo se alguém me desse uma dica de
como resolver esse problema.

   Um grande abraço.

   Daniel Sonda

Responder a