05/01/2006

Fazer busca dinamica no TreeView

olá Pessoal

Como eu faço para em um edit ir buscando num treeview o nome que está sendo digitado ?

eu tenho algo parecido só q tem o edit e um grid, então conforme vou digitando ele busca no grid com Locate.

como faço isso no tree ?

obrigado
Diogo


Diogoalles

Respostas

06/01/2006

Diogoalles

bom dia pessoal

hehehe, to penando com essa, pesquisei e tentei algumas coisas mas não consegui.
alguém poderia me ajudar?

valeu

Diogo


Responder Citar

06/01/2006

Salsa

faz um loop ... pega qntos itens tem no treeview... usando .count
faz um for ...
e vai checando se o valor do texto eh igual ou contem noq vc tah digitando... sei la... axu q assim da pra fazer de boa :)


Responder Citar

06/01/2006

Diogoalles

ñ vai me ajudar mt,

preciso de algo que o usuario vá digitando e já busca no treeview, deixando marcado....

similar ao que se faz numa busca num edit onde ele já vai buscando no grid.

valeu

Diogo


Responder Citar

06/01/2006

Emerson

altere a propriedade [b:1bad1439ae]HideSelection[/b:1bad1439ae] do TreeView para [b:1bad1439ae]FALSE[/b:1bad1439ae] e use a seguinte rotina no OnChange do seu componente Edit:

procedure TForm1.Edit1Change(Sender: TObject);
var
  i, tamanho: integer;
  no: ttreenode;
begin
  tamanho := length(edit1.text);
  if tamanho > 0 then
    for i := 0 to TreeView1.Items.Count-1 do
      if Copy(TreeView1.Items[i&93;.Text,1,tamanho) = edit1.text then
      begin
        no := TreeView1.Items&91;i&93;;
        TreeView1.Select(no);
        break;
      end;
end;



Responder Citar

06/01/2006

Diogoalles

e ai emerson
blz?

cara, implementei mas o foco do treeview nem se mexe ele não entra no ´if Copy(TreeView1 ...´
pela logica acho q tá certo o vc tá vendo algo de errado ? ñ sei


valeu mesmo..
Diogo


Responder Citar

07/01/2006

Emerson

talvez o problema esteja na ´caixa´ dos caracteres.
tente assim:

procedure TForm1.Edit1Change(Sender: TObject); 
var 
  i, tamanho: integer; 
  no: ttreenode; 
begin 
  tamanho := length(edit1.text); 
  if tamanho > 0 then 
    for i := 0 to TreeView1.Items.Count-1 do 
      if AnsiUpperCase(Copy(TreeView1.Items[i&93;.Text,1,tamanho)) = AnsiUpperCase(edit1.text) then 
      begin 
        no := TreeView1.Items&91;i&93;; 
        TreeView1.Select(no); 
        break; 
      end; 
end;


[size=18:2e69c57e08][b:2e69c57e08]não esqueça de alterar a propriedade HideSelection do TreeView para FALSE.[/b:2e69c57e08][/size:2e69c57e08]


Responder Citar

07/01/2006

Diogoalles

Blz, funcionou 100¬.

obrigado !


Responder Citar