Vou explicar o que eu estou querendo fazer:

Tenho um FormHeranca que serve de herança para outros forms(tem uns 100 forms 
herdados dele), e é utilizado em todos os projetos(aplicações) da empresa.
Porem em um dos projetos que utiliza esse form como herança sentiu a 
necessidade de se fazer um código na herança para que funcione em todos os 
forms somente desse projeto, os forms de outros projetos não precisam desse 
código, primeiro eu pensei em criar outro form herdando de FormHerança  e mudar 
toda a aplicação para que herdasse desse novo form, ou tentar fazer dessa 
forma, eu passaria um parametro pro form informando a classe pai e no create eu 
trocaria essa classe.


Entendeu?

Qual solução você acha melhor pra esse caso?

Obriagado.



  ----- Original Message ----- 
  From: Joao Morais 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Monday, May 07, 2007 1:38 PM
  Subject: Re: [delphi-br] Ajuda em criação de um form.


  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


   

[As partes desta mensagem que não continham texto foram removidas]

Responder a