TreeView?
Estou usando o Delphi 5 e o InterBase, e gostaria de montar um plano de contas usando subniveis, e pensei em usar o componente TreeView p/ facilitar a criação e a visualização p/ o usuário porem gostaria de saber como pegar o indice do item p/ poder armazenar o texto e o índice no banco.
Caso alguem conheça o componente ou outra meneira de trabalhar com niveis e subniveis ficarei muito grato.
Obrigado.
Caso alguem conheça o componente ou outra meneira de trabalhar com niveis e subniveis ficarei muito grato.
Obrigado.
Cob
Curtidas 0
Respostas
Julio2004
02/09/2003
Apanhei um pouquinho mas tenho a solução.
Vc deve ter de alguma maneira tabelas para cada item conta, com a integridade referencial de 1-n dispostas da seguinte forma:
Tabela C1 Tabela C2 Tabela C3
*CodC1 C 1 *CodC1 C 1 *CodC1 C 1
Desc C 50 *CodC2 C 1 *CodC2 C 1
Desc C 50 *CodC3 C 1
Desc C 50....
até a tabela C7 que será o último descendente de C1:
*CodC1 C 1
*CodC2 C 1
*CodC3 C 1
*CodC4 C 1
*CodC5 C 1
*CodC6 C 2
*CodC7 C 2
aí basta acrescentar o código abaixo em algum evento que vc queira disparar a construção do plano de contas no TreeView:
var No1,No2,No3,No4,No5,No6: TTreeNode;
Xc: string;
begin
Ativa(´´); // Função que deixa tabelas active:=True, vc pode fazer de outra maneira
with TreeView1.Items do
begin
Clear; // Vc Deve sempre liberar conteúdo da TreView...
DM.ADOC1.First; // Tabela C1 utilizada com provider ADO em DataModule chamado DM
while DM.ADOC1.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.0.0.0.0.00.00´;
No1:=Add(nil,Xc+´ ´+DM.ADOC1Descricao.Value);
DM.ADOC2.First;
while DM.ADOC2.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.0.0.0.00.00´;
No2:=AddChild(No1,Xc+´ ´+DM.ADOC2Descricao.Value);
DM.ADOC3.First;
while DM.ADOC3.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.0.0.00.00´;
No3:=AddChild(No2,Xc+´ ´+DM.ADOC3Descricao.Value);
DM.ADOC4.First;
while DM.ADOC4.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.0.00.00´;
No4:=AddChild(No3,Xc+´ ´+DM.ADOC4Descricao.Value);
DM.ADOC5.First;
while DM.ADOC5.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.´+DM.ADOC5Cod.Value+´.00.00´;
No5:=AddChild(No4,Xc+´ ´+DM.ADOC5Descricao.Value);
DM.ADOC6.First;
while DM.ADOC6.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.´+DM.ADOC5Cod.Value+´.´+DM.ADOC6Cod.Value+´.00´;
No6:=AddChild(No5,Xc+´ ´+DM.ADOC6Descricao.Value);
DM.ADOC7.First;
while DM.ADOC7.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.´+DM.ADOC5Cod.Value+´.´+DM.ADOC6Cod.Value+´.´+DM.ADOC7Cod.Value;
AddChild(No6,Xc+´ ´+DM.ADOC7Descricao.Value);
DM.ADOC7.Next;
end;
DM.ADOC6.Next;
end;
DM.ADOC5.Next;
end;
DM.ADOC4.Next;
end;
DM.ADOC3.Next;
end;
DM.ADOC2.Next;
end;
DM.ADOC1.Next;
end;
end;
Dicas:
. para selecionar item com <Enter> e jogar em um label por exemplo, vc pode usar:
If Key=#13 then Label1.Caption:=TreeView1.Selected.Text;
no evento OnKeyPress do TreeView
. para selecionar com o clique do mouse e jogar em um edit:
Edit1.Text:=TreeView1.Selected.Text;
no evento onMouseUp do TreeView
. e muito mais, use sua imaginação e boa sorte!!
Vc deve ter de alguma maneira tabelas para cada item conta, com a integridade referencial de 1-n dispostas da seguinte forma:
Tabela C1 Tabela C2 Tabela C3
*CodC1 C 1 *CodC1 C 1 *CodC1 C 1
Desc C 50 *CodC2 C 1 *CodC2 C 1
Desc C 50 *CodC3 C 1
Desc C 50....
até a tabela C7 que será o último descendente de C1:
*CodC1 C 1
*CodC2 C 1
*CodC3 C 1
*CodC4 C 1
*CodC5 C 1
*CodC6 C 2
*CodC7 C 2
aí basta acrescentar o código abaixo em algum evento que vc queira disparar a construção do plano de contas no TreeView:
var No1,No2,No3,No4,No5,No6: TTreeNode;
Xc: string;
begin
Ativa(´´); // Função que deixa tabelas active:=True, vc pode fazer de outra maneira
with TreeView1.Items do
begin
Clear; // Vc Deve sempre liberar conteúdo da TreView...
DM.ADOC1.First; // Tabela C1 utilizada com provider ADO em DataModule chamado DM
while DM.ADOC1.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.0.0.0.0.00.00´;
No1:=Add(nil,Xc+´ ´+DM.ADOC1Descricao.Value);
DM.ADOC2.First;
while DM.ADOC2.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.0.0.0.00.00´;
No2:=AddChild(No1,Xc+´ ´+DM.ADOC2Descricao.Value);
DM.ADOC3.First;
while DM.ADOC3.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.0.0.00.00´;
No3:=AddChild(No2,Xc+´ ´+DM.ADOC3Descricao.Value);
DM.ADOC4.First;
while DM.ADOC4.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.0.00.00´;
No4:=AddChild(No3,Xc+´ ´+DM.ADOC4Descricao.Value);
DM.ADOC5.First;
while DM.ADOC5.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.´+DM.ADOC5Cod.Value+´.00.00´;
No5:=AddChild(No4,Xc+´ ´+DM.ADOC5Descricao.Value);
DM.ADOC6.First;
while DM.ADOC6.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.´+DM.ADOC5Cod.Value+´.´+DM.ADOC6Cod.Value+´.00´;
No6:=AddChild(No5,Xc+´ ´+DM.ADOC6Descricao.Value);
DM.ADOC7.First;
while DM.ADOC7.Eof=False do
begin
Xc:=DM.ADOC1Cod.Value+´.´+DM.ADOC2Cod.Value+´.´+DM.ADOC3Cod.Value+´.´+DM.ADOC4Cod.Value+´.´+DM.ADOC5Cod.Value+´.´+DM.ADOC6Cod.Value+´.´+DM.ADOC7Cod.Value;
AddChild(No6,Xc+´ ´+DM.ADOC7Descricao.Value);
DM.ADOC7.Next;
end;
DM.ADOC6.Next;
end;
DM.ADOC5.Next;
end;
DM.ADOC4.Next;
end;
DM.ADOC3.Next;
end;
DM.ADOC2.Next;
end;
DM.ADOC1.Next;
end;
end;
Dicas:
. para selecionar item com <Enter> e jogar em um label por exemplo, vc pode usar:
If Key=#13 then Label1.Caption:=TreeView1.Selected.Text;
no evento OnKeyPress do TreeView
. para selecionar com o clique do mouse e jogar em um edit:
Edit1.Text:=TreeView1.Selected.Text;
no evento onMouseUp do TreeView
. e muito mais, use sua imaginação e boa sorte!!
GOSTEI 0