Fórum Ajuda com herança #292406

20/08/2005

0

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

Responder

Posts

20/08/2005

Marco Salles

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


Responder

Gostei + 0

20/08/2005

Rjun

Mas se eu fizer um typecast não resolveria?


Responder

Gostei + 0

21/08/2005

Marco Salles

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



Responder

Gostei + 0

21/08/2005

Rjun

Marcos

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


Responder

Gostei + 0

21/08/2005

Rjun

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?


Responder

Gostei + 0

22/08/2005

Kapak

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´);



Responder

Gostei + 0

22/08/2005

Massuda

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.


Responder

Gostei + 0

22/08/2005

Rjun

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar