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