Ajuda com Treeview

Boa tarde!

Estou com duvida sobre a possibilidade do treeview poder listar todos os objetos de uma determinada pasta de dados do elipse. A ideia seria listar todos os meus XO e a partir da seleção de um deles mostrar propriedades pertinentes a operação. Portando a dúvida esta em como eu acessaria a pasta de dados e a forma do script que deveria utilizar para isto (já vi o exemplo mas não o compreendi muito bem).

Boa tarde Fernando,

O script abaixo insere todos os objetos da pasta Dados:

Sub TelaInicial_OnShow()

Set TreeView1 = Screen.Item("TreeView1")

'limpa qualquer nó criado
TreeView1.Nodes.Clear

For each objs in Application.GetObject("Dados")
	if TypeName(objs) = "XOTeste" then
	Set a = TreeView1.Nodes.Add( , , , objs.name)
	a.Expanded = True
	a.Bold = True
	a.Checked = True
	end if
next
End Sub

image

Para retornar alguma propriedade específica do objeto selecionado, supondo que o XO possui a Propriedade1 criada, uma alternativa seria a seguinte:

Sub TreeView1_NodeClick(Node)
msgbox Application.GetObject("Dados."& Cstr(SelectedItem)).Propriedade1
End Sub

Para maiores detalhes sobre o objeto Treeview, visualize o artigo e o post abaixo:
http://kb.elipse.com.br/pt-br/questions/2211

1 Like

Bom dia Délio! Desculpe a demora no retorno.
Não consegui visualizar a listagem dos itens… fiz exatamente como o descrito. Li em outro tópico sobre a compatibilidade com versões mais novas do Windows e office. Poderia ser esse o problema? Na minha máquina possuo o office 365 e win10. (Tive que registar manualmente MSComctLib)

Bom dia Fernando,

Por gentileza, envie a aplicação para o meu e-mail (delio@elipse.com.br), vou tentar reproduzir o problema.

Fernando,
Você possuía dois erros no script.
Primeiramente, a sua pasta DADOS possui tags internos, então em TypeName você deve adicionar “InternalTag”, e não o nome do XObject.
Ao adicionar o nome dos objetos em TreeView1.Nodes.Add, o argumento estava incorreto.

Segue script alterado:

Set T reeView1 = Item(“TreeView1”)

TreeView1.Nodes.Clear

DIM OBJS
For each OBJS in Application.GetObject("DADOS")

	'teste de objetos encontrados
	MsgBox("aaa")
	
	if TypeName(objs) = "InternalTag" then
	
	Set a = TreeView1.Nodes.Add ( , , , objs.name)
	a.Expanded = True
	a.Bold = True
	a.Checked = True
	
	'teste de condicao
	MsgBox("bbb")
	end if
next
1 Like

Olá!!!
Aproveitando esse tópico, fiz uma arvore de dados na pasta de dados (Figura 1)
image

Peguei o script do KB-33263
Ele rodou e varreu a pasta DadosTreeView que fiz!!!
Até aqui ok, porém no KB usa um commandbuttom para chamar a função para o treeview e ao clicar mais de uma vez no commandbuttom apresenta esse erro (Imagem 2)

errocommandbuttom

Então eu peguei todo o script e coloquei no (OnShow) da tela e toda vez que sai e volta da tela apresenta esse mesmo erro da (Figura 2)

Qual seria a melhor forma para buscar minha pasta de dados e add os nós no treeview ?

A finalidade é montar essa árvore e ao clicar em cada ckeckbox, habilitar uma pena no E3Chart na mesma tela.

O Script que usei é o mesmo do KB só alterei a pasta para buscar:

“Sub GERACAO_OnShow()
AddTree Application.GetObject(”[DadosPV BRD].DadosTreeView"), true
End Sub

Sub AddTree(Parent, bFirst)
set treeview = Screen.Item(“TreeView1”)
for each obj in Parent
'if Typename(obj) = “Area” then
if bFirst then
treeview.Nodes.Add , , obj.Pathname, obj.name
else
treeview.Nodes.Add Parent.Pathname, 4, obj.PathName, obj.name
'end if
AddTree obj, false
end if
next
End Sub"

Luiz,

Basta inserir a função Clear no início do script para evitar a duplicação de chaves. Por exemplo:

Sub GERACAO_OnShow()
    Screen.Item("TreeView1").Nodes.Clear()
    AddTree Application.GetObject("[DadosPV BRD].DadosTreeView"), true
End Sub

Opa!
Funcionou 100%
Muito obrigado Paulo.

1 Like