Ajuda com herança
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.
Declaração da classe TmtTreeNode
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
Curtidas 0
Respostas
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
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
20/08/2005
Mas se eu fizer um typecast não resolveria?
GOSTEI 0
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
20/08/2005
Marcos
Obrigado pela resposta...acho que to cometendo bobagem mesmo...valeu....
Obrigado pela resposta...acho que to cometendo bobagem mesmo...valeu....
GOSTEI 0
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
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
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.
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
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