Escrever valor de um parametro na TreeView

Delphi

16/09/2005

Olá a todos,

Estou com um pequeno problema, é não estou a ver a solução. Explicando, estou a cria uma treeview segundo uma tabela que é o menu o problema é que eu queria escrever o valor do campo ´Codigo´ na tree, para quando clicar nela com o mouse obtevesse esse código e procurava o formulário para o chamar. Esse código é númerico. Só que não estou conseguir nenhuma propriedade da treew que possa colocar. No MainMenu era fácil bastava escrever no propriedade TAG e no treeview alúém sabe?

Estou a cria os nós da tree com o seguinte código
 Node := TreeView1.Items.Add(nil, Qry.FieldByName(´descrimenu´).AsString);
...
 Node := TreeView1.Items.Addchild(Nod, Qry.FieldByName(´descrimenu´).AsString);


Para o MainMenu era assim que fazia, mas para a Tree?
    Item := TMenuItem.Create(nil);
    Item.Caption := Qry.FieldByName(´descrimenu´).AsString;
    Item.Tag     := Qry.FieldByName(´CODIGO´).AsInteger;
    item.ImageIndex :=   Qry.FieldByName(´imagem´).AsInteger;



Porty

Porty

Curtidas 0

Respostas

Ipc$

Ipc$

16/09/2005

Node := TreeView1.Items.Add(nil, Qry.FieldByName(´descrimenu´).AsString);
Node.Data := AllocMem(4);
Move(Qry.FieldByName(´CODIGO´).AsInteger, Node.Data^, 4);
Para recuperar:
var Codigo:Integer;
begin
  Codigo := PInteger(TreeView1.Selected.Data)^;
end;
Não esqueça de liberar a memória alocada para os Node.Data.


GOSTEI 0
Ipc$

Ipc$

16/09/2005

Desculpe, Move requer uma variável.
Codigo := Qry.FieldByName(´CODIGO´).AsInteger; 
Move(Codigo, Node.Data^, 4);



GOSTEI 0
Porty

Porty

16/09/2005

[quote:b74c46bcfa=´ipc$´]
Node := TreeView1.Items.Add(nil, Qry.FieldByName(´descrimenu´).AsString);
Node.Data := AllocMem(4);
Move(Qry.FieldByName(´CODIGO´).AsInteger, Node.Data^, 4);

[/quote:b74c46bcfa]

Ao colocar esre código dá o seguinte erro:
error unTree.ps(271):Variable required

Já agora pode dizer como faço isto:
Não esqueça de liberar a memória alocada para os Node.Data



GOSTEI 0
Ipc$

Ipc$

16/09/2005

Veja a segunda resposta.


GOSTEI 0
Porty

Porty

16/09/2005

[quote:405e38002b=´ipc$´]Veja a segunda resposta.[/quote:405e38002b]

Ao colocar o seguinte código dá Erro:
     Move(Qry.FieldByName(´CODIGO´).AsInteger, Node.Data^, 4);


O erro que dá é: Error UnTree.pas(271): Variable required


GOSTEI 0
Ipc$

Ipc$

16/09/2005

Pois é, vc fez a conversão que está na segunda resposta ?
Codigo := Qry.FieldByName(´CODIGO´).AsInteger; 
Move(Codigo, Node.Data^, 4);



GOSTEI 0
Porty

Porty

16/09/2005

Ok já entendi é funciona direitinho. Já agora como eu faço para liberar a memória alocada para os Node.Data..

Obrigada


GOSTEI 0
Ipc$

Ipc$

16/09/2005

  FreeMem(Node.Data);



GOSTEI 0
Porty

Porty

16/09/2005

[quote:b3c4a9bb98=´ipc$´]
  FreeMem(Node.Data);
[/quote:b3c4a9bb98]

Mas devo colocar este código qd? Depois de Criar a Tree, no momento de fechar aplicação??. Se for no momento de fechar aplicação acho que não é necessário pois o proprio delphi encarrega-se de fechar tudo certo?


GOSTEI 0
Ipc$

Ipc$

16/09/2005

Bom, no momento de criar a Tree, os Node.Data eatão = nil.
Libere quando vc não for mais precisar dos códigos armazenados lá.
Teoricamente no fechamento do aplicativo, toda a memória é liberada, mas particularmente prefiro liberar a memória que aloco.


GOSTEI 0
POSTAR