Ricardo Lima wrote:

> Eu quero fazer uma alteração na herança do form, antes dele ser criado.
> 
> Eu fiz esse código
> 
> constructor TFormMasterCadastro.Create(AOwner: TComponent);
>    type PClass = ^TClass;
> begin
>    PClass(Self)^ := ClassFormMasterCadastro;
>    inherited;
> end;
> 
> Funciona pra eu alterar a classe do form, porem o que eu quero alterar é o 
> parent da classe algo tipo assim:
> 
> PClass(Self.ClassParent)^ := ClassFormMasterCadastro;

Quando você cria a instância de uma classe, o compilador reserva espaço 
suficiente para abrigar todos os membros da classe.

A instância é criada antes da sua chamada a PClass(Self)..., e não pelo 
inherited, portanto o seu hacking pode até ter funcionado, mas a sua dor 
de cabeça será diretamente proporcional a euforia em botar a coisa toda 
pra funcionar. Recomendação de quem adora um hacking: foge disso.

Ao invés de fazer com que o construtor altere a própria classe, faça com 
que a chamada seja feita através de um ponteiro para classe:

var
   VFormClass: TFormClass;

...

   VFormClass := TFormB;

...

   VMeuForm := VFormClass.Create(nil);

limpo, bonito, seguro, orientado a objetos, e o melhor de tudo: funciona 
muito bem.

Pra fechar, você ainda não me disse o que você quer *realmente* fazer.

--
Joao Morais

Responder a