Olá Pessoal,
Alguém sabe como realizar uma busca pelos itens de um TREE, independente do node que esteja e como dar um focu nele ? será que tem como fazer isso ?
Realizar uma busca pelos itens de um TREE ?
Moderador: Moderadores
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Realizar uma busca pelos itens de um TREE ?
Olá Leonardo,
Neste exemplo abaixo em HMG 4 tem um exemplo de como manipular os itens do TREE, talvez seja similar ou em HwGui tem algo assim. Espero que te sirva como referência:Se você quer buscar um item do TREE, aconselho colocar em vetor e fazer uma função para buscar cada item, varrendo os elementos do vetor.
Neste exemplo abaixo em HMG 4 tem um exemplo de como manipular os itens do TREE, talvez seja similar ou em HwGui tem algo assim. Espero que te sirva como referência:
Código: Selecionar todos
/*
HMG 4 DEMO
(c) 2010 Roberto Lopez <mail.box.hmg@gmail.com>
*/
#include "hmg.ch"
Function main()
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 640 ;
HEIGHT 480 ;
TITLE 'TreeView Sample' ;
MAIN;
On Init {||Form_1:center()}
DEFINE MAIN MENU
POPUP '&File'
ITEM 'Get Tree Value' ACTION MsgInfo( Str ( Form_1.Tree_1.Value ) )
ITEM 'Set Tree Value' ACTION Form_1.Tree_1.Value := 10
END POPUP
END MENU
DEFINE TREE Tree_1 AT 40,10;
WIDTH 200 HEIGHT 400;
VALUE 4 ;
on change {||MsgInfo("Value Changed")} ;
on dblclick {||MsgInfo("Double Clicked")} ;
NODEIMAGES { "doc_fl.bmp" };
ITEMIMAGES { "cl_fl.bmp", "op_fl.bmp" }
NODE 'Root' IMAGES {'world.bmp'}
TREEITEM 'Item 1.1'
TREEITEM 'Item 1.2'
TREEITEM 'Item 1.3'
NODE 'Docs'
TREEITEM 'Docs 1' IMAGES {'varios.bmp'}
END NODE
NODE 'Notes' IMAGES {'varios.bmp'}
TREEITEM 'Notes 1'
TREEITEM 'Notes 2'
TREEITEM 'Notes 3'
TREEITEM 'Notes 4'
TREEITEM 'Notes 5'
END NODE
NODE 'Books' IMAGES { "cl_fl.bmp", "op_fl.bmp" }
TREEITEM 'Book 1' IMAGES {'doc.bmp'}
TREEITEM 'Book 2' IMAGES {'doc.bmp'}
NODE 'Book 3'IMAGES {'book.bmp'}
TREEITEM 'Book 3.1'
TREEITEM 'Book 3.2'
END NODE
END NODE
END NODE
NODE 'Root1' IMAGES {'world.bmp'}
END NODE
END TREE
@ 40,400 BUTTON Button_1 ;
CAPTION 'Delete Item' ;
ACTION Form_1.Tree_1.DeleteItem( Form_1.Tree_1.Value ) ;
WIDTH 150
@ 70,400 BUTTON Button_2 ;
CAPTION 'Delete All Items' ;
ACTION Form_1.Tree_1.DeleteAllItems ;
WIDTH 150
@ 100,400 BUTTON Button_3 ;
CAPTION 'Get Item Count' ;
ACTION MsgInfo ( Str ( Form_1.Tree_1.ItemCount ) ) ;
WIDTH 150
@ 130,400 BUTTON Button_4 ;
CAPTION 'DeleteAll / Add Test' ;
ACTION AddItemTest() ;
WIDTH 150
@ 160,400 BUTTON Button_5 ;
CAPTION 'Set Value' ;
ACTION Form_1.Tree_1.Value := 1 ;
WIDTH 150
@ 190,400 BUTTON Button_6 ;
CAPTION 'Get Item' ;
ACTION MsgInfo ( Form_1.Tree_1.Item ( Form_1.Tree_1.Value ) ) ;
WIDTH 150
@ 220,400 BUTTON Button_7 ;
CAPTION 'Set Item' ;
ACTION Form_1.Tree_1.Item( Form_1.Tree_1.Value , 'New Item text' ) ;
WIDTH 150
@ 250,400 BUTTON Button_8 ;
CAPTION 'Expand Item' ;
ACTION Form_1.Tree_1.Expand( 1 ) ;
WIDTH 150
@ 280,400 BUTTON Button_9 ;
CAPTION 'Collapse Item' ;
ACTION Form_1.Tree_1.Collapse( 1 ) ;
WIDTH 150
END WINDOW
ACTIVATE WINDOW Form_1
Return
Function AddItemTest()
Form_1.Tree_1.DeleteAllItems()
Form_1.Tree_1.AddItem( 'New Root Item 1' , 0 )
Form_1.Tree_1.AddItem( 'New Item 1.1' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.2' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.3' , 1 )
Form_1.Tree_1.AddItem( 'New Root Item 2' , 0, {'book'} )
Form_1.Tree_1.AddItem( 'New Item 2.1' , 5, {'varios'} )
Form_1.Tree_1.AddItem( 'New Item 2.2' , 5, {'doc'} )
Form_1.Tree_1.AddItem( 'New Item 2.3' , 5, {'wd'} )
Return NilUm clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Realizar uma busca pelos itens de um TREE ?
Olá Pablo,
Toda ajuda é bem vinda sim.
Esse seu exemplo mostra o TREE, comandos de Change e click, mas não tem como buscar um ITEN pelo nome da descrição do ITEN do tree e dar o focu nele. O Tree acho que já é um VETOR multidimencional, porem preciso saber quais as dimensões certa para fazer a busca na parte certa do vetor e dar o focu no tree que tiver a posição que eu achar.
Se tiver um exemplo de busca lhe agradeço, se for em Hwgui melhor ainda.
Toda ajuda é bem vinda sim.
Esse seu exemplo mostra o TREE, comandos de Change e click, mas não tem como buscar um ITEN pelo nome da descrição do ITEN do tree e dar o focu nele. O Tree acho que já é um VETOR multidimencional, porem preciso saber quais as dimensões certa para fazer a busca na parte certa do vetor e dar o focu no tree que tiver a posição que eu achar.
Se tiver um exemplo de busca lhe agradeço, se for em Hwgui melhor ainda.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Realizar uma busca pelos itens de um TREE ?
Beleza, colega. Pois eu por enquanto, conheço algo de HMG e talvez as vezes soe que quero te empurrar algo...Toda ajuda é bem vinda sim.
Sim, mas te dá a idéia de você disponibilizar um botão de "Busca". E ao clicar você poderia chamar a função que eu mencionava anteriormente.Esse seu exemplo mostra o TREE, comandos de Change e click, mas não tem como buscar um ITEN
Pode ser que internamente esteja armazenado em forma de matriz, mas aí teria que conhecer a fundo o mecanismo e nomes das variáveis internas do TREE. Em HMG existe uma matriz que guarda informações importantes, mas é desaconselhádo, manipulá-las. De todas formas, eu dizia para você primeiramente criar um VETOR unidiensional contendo a descrição (título) de cada item do TREE e no momento que você está declarando cada NODE você utilizaria o vetor em lugar da string/descrição de cada item. Daí você teria os dados em vetor, mais fácil de localizar. <Veja por exemplo a linha: 31,32,33,34... onde está entre aspas>O Tree acho que já é um VETOR multidimencional
Para saber a quantidade em HMG é só utilizar ItemCount que retornar quantos elementos tem. <Veja linha 57 do meu código>porem preciso saber quais as dimensões certa para fazer a busca na parte certa do vetor
Após você obter a posição do item que está "buscando", fica fácil. Na minha opinião bastaria você atribuir esse valor obtido do ASCAN (ou fazer através do laço com FOR I=1 TO ItemCount e ver qual elemento atende a busca) à propriedade "Value" do TREE. <veja linhas: 7 e 9 atribuindo e 21 e 23 onde define a posição inicial (focus, digamos)>e dar o focu no tree que tiver a posição que eu achar.
Estou disponibilizando abaixo o código em HMG do Help do STRU que ja tinha disponibilizado na seção Downloads. Lamentavelmente ainda não mexo com HwGUi como comentei no início. Mas acho que dei uma idéia de como fazer, talvez você fazendo e postando eu possa também acompanhar.Se tiver um exemplo de busca lhe agradeço, se for em Hwgui melhor ainda.
Código: Selecionar todos
Function Help()
If IsWindowActive(Win_2)
DoMethod("Win_2","SetFocus")
Return nil
Endif
If Empty(cTexto)
nItem:=2
Else
nItem:=3
Endif
DEFINE WINDOW Win_2 ;
AT 0,0 ;
WIDTH 750 ;
HEIGHT 500 ;
TITLE 'Ajuda STRU' ;
ICON "STRU.ICO" ;
ON KEY ESCAPE ACTION thiswindow.release()
DEFINE TREE Tree_1 AT 10,10 WIDTH 220 HEIGHT 380 ;
VALUE nItem ;
NODEIMAGES { "file_closed.bmp", "file_open.bmp" } ;
ON CHANGE Mostra(Win_2.Tree_1.Value)
@ 010,240 IMAGE Image_1 ;
PICTURE 'Select1.bmp' ;
WIDTH 490 ;
HEIGHT 440 ;
ONCLICK MsgInfo("TESTE")
NODE 'Procedimentos' IMAGES { "book_closed.bmp", "book_open.bmp" }
TREEITEM 'Selecionar' IMAGES {'select.bmp'}
NODE 'Redirecionar' IMAGES {'redirect.bmp'}
TREEITEM 'Tela' IMAGES {'screen.bmp'}
TREEITEM 'Arquivo' IMAGES {'file.bmp'}
TREEITEM 'Clipboard' IMAGES {'clipboard.bmp'}
TREEITEM 'Impressora' IMAGES {'printer.bmp'}
END NODE
TREEITEM 'Sair' IMAGES {'quit.bmp'}
END NODE
NODE 'Na Linha de comando' IMAGES {"console.bmp"}
TREEITEM 'Chamar em modo gráfico' IMAGES {'execute.bmp'}
NODE 'Selecionar DBFs' IMAGES {'select.bmp'}
TREEITEM 'Todos os DBFs'
TREEITEM 'DBF pre-definido'
TREEITEM 'Com o caminho e todos DBFs'
END NODE
NODE 'Direcionar saída da listagem' IMAGES {'redirect.bmp'}
TREEITEM 'Para a Tela'
TREEITEM 'Para a Área de Transferência'
TREEITEM 'Para a Impressora padrão'
TREEITEM 'Para Arquivo pre-definido'
END NODE
TREEITEM 'Ajuda' IMAGES {'help.bmp'}
END NODE
END TREE
FOR I=1 TO Win_2.Tree_1.ItemCount
Win_2.Tree_1.Expand( I )
NEXT
END WINDOW
CENTER WINDOW Win_2
ACTIVATE WINDOW Win_2
Return Nil
Function Mostra(nFig)
Do Case
Case nFig=1
Win_2.Image_1.Picture := 'Select1.png'
Case nFig=2
Win_2.Image_1.Picture := 'Select1.bmp'
Case nFig=3
Win_2.Image_1.Picture := 'Select2.bmp'
Case nFig=4
Win_2.Image_1.Picture := 'Select3.bmp'
Otherwise
Win_2.Image_1.Picture := 'Select1.bmp'
EndCase
Return nilUm clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Realizar uma busca pelos itens de um TREE ?
Olá Pablo,
Ainda não serviu não, acho que eu não estou sabendo me explicar. vou tentar ver em Fivewin se tem isso, e volto aqui para postar os resultados.
Ainda não serviu não, acho que eu não estou sabendo me explicar. vou tentar ver em Fivewin se tem isso, e volto aqui para postar os resultados.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql