Ajuda com herança

Delphi

20/08/2005

Criei uma classe herdade de TTreeNode chamada TmyTreeNode. Acontece que em um dado momento quero que um objeto TmyTreeNode receba um objeto TTreeNode e não estou conseguindo. O que estou fazendo de errado.

var
  RootNode: TmyTreeNode;
begin
  ...
  // Aqui gera o erro
  // Incompatible types: ´TmyTreeNode´ and ´TTreeNode´
  RootNode := TreeView.Items.Add(nil, TreeViewRootName);
end;


Declaração da classe TmtTreeNode
TmyTreeNode = class(TTreeNode)
  private
    { private declarations }
    FCode: integer;
    FIsChild: Boolean;
  protected
    { protected declarations }
  public
    { public declarations }
    property Code: integer read FCode write FCode;
    property IsChild: Boolean read FIsChild write FIsChild;
  end;



Rjun

Rjun

Curtidas 0

Respostas

Marco Salles

Marco Salles

20/08/2005

Olha o que eu poso dizer é o seguinte

Um Objeto da classe Ancestral Pode receber um Objeto da Classe Descendente , mas um objeto da classe Descendente não pode receber um Objeto da classe ancestral

Por exemplo

Seje

type
TAnimal = class
public
etc...
end;

TDog = class (TAnimal)
public
etc...
end;

Agora definimos

Var
Animal:TAnimal
Cachorro:TDog;

Esta atribuição
Begin
cachorro:=Animal
end

Da erro de :

[b:0d7b5028e1][Error] AnimF.pas(76): Incompatible types: ´TDog´ and ´TAnimal´[/b:0d7b5028e1]


[URL=http://imageshack.us][img:0d7b5028e1]http://img382.imageshack.us/img382/411/imagemclassedescendente7hc.jpg[/img:0d7b5028e1][/URL]

[b:0d7b5028e1]Porque Uma classe descendente não pode receber uma classe anscedente[/b:0d7b5028e1]

E No seu caso TmyTreeNode e descendente de TTreeNode


GOSTEI 0
Rjun

Rjun

20/08/2005

Mas se eu fizer um typecast não resolveria?


GOSTEI 0
Marco Salles

Marco Salles

20/08/2005

Mas se eu fizer um typecast não resolveria?


eu acho que neste caso não.. Pois mesmo que o projeto compilasse , na hora de execução voce teria erro... Pelos motivos explicados anteriormente

Porque Uma classe descendente não pode receber uma classe anscedente



GOSTEI 0
Rjun

Rjun

20/08/2005

Marcos

Obrigado pela resposta...acho que to cometendo bobagem mesmo...valeu....


GOSTEI 0
Rjun

Rjun

20/08/2005

Ainda estou com problemas em relação a herança. Quero criar um TTreeNode extendido para criar 2 propriedades a mais. Depois quero inserir essa minha TTreeNode dentro de uma TreeView, mas não encontrei nenhum método onde eu possa inserir um nó. Apenas encontrei métodos que me retornam um nó inserido. Alguem pode me explicar como posso fazer isso?


GOSTEI 0
Kapak

Kapak

20/08/2005

Quero criar um TTreeNode extendido para criar 2 propriedades a mais
Vc pode utilizar a propriedade Data de TTreeNode.
Depois quero inserir essa minha TTreeNode dentro de uma TreeView...
  TreeView1.Items.Add(nil, ´Nível 0´);
  TreeView1.Items.AddChild(Node, ´Filho de Node´);



GOSTEI 0
Massuda

Massuda

20/08/2005

Depois de dar uma olhada no fonte do TTreeView, me parece que a forma de você poder utilizar nós que sejam derivados de TTreeNode seria derivar uma classe sua de TTreeView e sobrecarregar o método protegido CreateNode.

Quando você executa o método TTreeView.Items.Add, internamente o método TTreeView.CreateNode é executado para criar um novo nó do treeview.


GOSTEI 0
Rjun

Rjun

20/08/2005

Irei testar isso em casa hoje a noite. Amanhã postarei o que consegui. Fiz essa operação em C# e foi de uma simplicidade incrível. Em Delphi está mais complicado.


GOSTEI 0
POSTAR