Realizar uma busca pelos itens de um TREE ?

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Realizar uma busca pelos itens de um TREE ?

Mensagem por sygecom »

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 ?
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
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 ?

Mensagem por Pablo César »

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:

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 Nil
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.
Um 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.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Realizar uma busca pelos itens de um TREE ?

Mensagem por sygecom »

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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
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 ?

Mensagem por Pablo César »

Toda ajuda é bem vinda sim.
Beleza, colega. Pois eu por enquanto, conheço algo de HMG e talvez as vezes soe que quero te empurrar algo...
Esse seu exemplo mostra o TREE, comandos de Change e click, mas não tem como buscar um ITEN
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.
Imagem
O Tree acho que já é um VETOR multidimencional
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>
porem preciso saber quais as dimensões certa para fazer a busca na parte certa do vetor
Para saber a quantidade em HMG é só utilizar ItemCount que retornar quantos elementos tem. <Veja linha 57 do meu código>
e dar o focu no tree que tiver a posição que eu achar.
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)>
Se tiver um exemplo de busca lhe agradeço, se for em Hwgui melhor ainda.
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.

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 nil
Um 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.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Realizar uma busca pelos itens de um TREE ?

Mensagem por sygecom »

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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder