Jump to content
Fórum Script Brasil
  • 0

Saber os subitem de um item selecionado treeview..


Gabrielllll

Question

Olá, eu tenho um código que pesquisa o item na treeview e depois seleciona, so que eu tenho uma dúvida pesquisei varias coisas aqui sobre esse treeview e vi que ele tem varias frescuras...

bom como o nome do tópico já diz, eu preciso saber os subitems de um item selecionado treeview

vamo supor

Teste 1

pegaronomedesseitem

pegaronomedesseitem2

pegaronomedesseitem3

e isso mais não e certo que so tem 3 subitems ...

bom espero que vocês consiga me ajudar

aqui vai o código da pesquisa!

function Tform1.TreeItemSearch(TV: TTreeView; SucheItem: string): TTreeNode;

var

i: Integer;

iItem: string;

begin

if (TV = nil) or (SucheItem = '') then Exit;

for i := 0 to TV.Items.Count - 1 do

begin

iItem := TV.Items.Text;

if SucheItem = iItem then

begin

Result := TV.Items;

Exit;

end

else

begin

Result := nil;

end;

end;

end;

var

Node: TTreeNode;

begin

TRY

Node := TreeItemSearch(TV, 'teste');

TV.Selected := Node;

except

end;

aguardo!!

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0
bom como o nome do tópico já diz, eu preciso saber os subitems de um item selecionado treeview

esse exemplo mostra quais são os subitens de um item da lista no proprio treeview... modifique para obter o nome do subitem

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  for i:= 0 to TreeView1.Items.Count -1 do
  begin
    if TreeView1.Items[i].Text = 'AAA' then // nome de um item da lista
       TreeView1.Items[i].Item[0].Selected := True;
  end;

end;

abraço

Link to comment
Share on other sites

  • 0

Jhonas tem como saber quantos subitems tem? e depois selecionar um por um... ?

ou se não jhonas selecionando subitem e item um por um por um tempo determinado

exemplo

item

subitem1

subitem2

subitem3

vai percorrendo e selecionando

QUOTE

bom como o nome do tópico já diz, eu preciso saber os subitems de um item selecionado treeview

esse exemplo mostra quais são os subitens de um item da lista no proprio treeview... modifique para obter o nome do subitem

for i:= 0 to TreeView1.Items.Count -1 do

begin

percorre a treeview consegue me ajudar nessa logica jhonas ou alguém ae ? aguardo..

Edited by Gabrielllll
Link to comment
Share on other sites

  • 0

exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var i, x : integer; item : string; s : TTreeNode;
begin
  i := 0; x := 0;
  for i := 0 to TreeView1.Items.Count -1 do  // conta quantos itens e subitens tem no treeview
     begin
     item := TreeView1.Items[i].Text;  // mostra o nome de todos os itens e subitens por vez
     s := TreeView1.Items[i].Parent;  // armazena o no pai para teste

     if s = nil then // se for o nó pai, mostra quais são os nós filhos
        begin
           for x := 0 to TreeView1.Items.Item[x].Count -1 do
              if TreeView1.Items[i].Text = item then
                  showmessage(TreeView1.Items[i].Item[x].Text);
        end;
       x := 0;
     end;
end;

faça testes para entender a lógica

abraço

Link to comment
Share on other sites

  • 0

gostei da sua logica jhonas eu consegui aqui para percorrer a treeview mais so que depois que chega na string TESTE13 da erro ... list index out bounds ....

var i : integer;

begin

for i:= 0 to TV.Items.Count -1 do // percorre a treeview

begin

if TV.Items.Text = 'TESTE13' then // nome de um item da lista

TV.Items.Item.Selected := True;

sleep(1000);

TV.Selected := TV.Items;

tv.SetFocus;

end;

consegue me ajudar so apenas percorrer os subitems do TESTE13 depois que sair do item13 vamo supor for para item14 .. ele parar?

aguardo.. !!

Edited by Gabrielllll
Link to comment
Share on other sites

  • 0
gostei da sua logica jhonas eu consegui aqui para percorrer a treeview mais so que depois que chega na string TESTE13 da erro ... list index out bounds ....

Para corrigir esse erro, modifique o código

procedure TForm1.Button1Click(Sender: TObject);
var i, x, y,z : integer; item : string; s : TTreeNode;
begin
  i := 0; x := 0; z := 0;
  for i := 0 to TreeView1.Items.Count -1 do
     begin
     item := TreeView1.Items[i].Text;
     s := TreeView1.Items[i].Parent;

     if s = nil then
        begin

           for x := 0 to TreeView1.Items.Item[x].Count -1 do
              begin
                 inc(z);
                 if x = TreeView1.Items.Item[x].Count -1 then
                    y := 0
                 else
                    y := x;

                 if (z = i) and (x = 1) then
                     exit;

                 if TreeView1.Items[i].Text = item then
                    showmessage(TreeView1.Items[i].Item[y].Text)
              end;
        end;
     x := 0;
     end;
end;

abraço

Link to comment
Share on other sites

  • 0

Jhonas vo explicar para você oque eu estou fazendo porque essa sua logica e bom eu gostei oque ele faz mais não e oque eu estou querendo hauehaeueu desculpa..

e que tipo assim vamo supor

tem o seguinte

Teste 1 item

subitems

teste2

teste3-teste4

Teste2 item

e que nem sempre e a mesmo nome o teste3 então eu quero apenas começar do Teste 1 que e o item e percorrer os subsitems e selecionado.. eu consegui no código acima que passei para você so que eu so consigo começar do Teste1 se ele for o item index 0 teria como começar pelo nome a percorrer isso, percorrer o item Teste 1 o seus subsitems e terminar no TESTE 2 item ..

da uma olhada mais ou menos oque eu consegui nesse código :

var i : integer;

begin

for i:= 0 to TV.Items.Count -1 do // percorre a treeview

begin

if TV.Items.Text = 'TESTE1' then // nome de um item da lista

TV.Items.Item.Selected := True; // seleciona item item index i

sleep(1000);//espera 1000 interval sleep

TV.Selected := TV.Items; // seleciona o item index i percorrido.. e assim vai indo percorrendo e selecionando.

tv.SetFocus;

end;

aguardo e que estou precisando mt disso percorrer e selecionar..

so que apenas começando do TESTE 1 Item percorrendo seus subsitems e terminando no TESTE 2

espero que você possa me ajudar nisso desculpa! por estar dando trabalho a vc =]

eu fiz uma logica de listbox1 fazendo a mesma coisa que estou querendo no treeview

veja ae se te ajuda :

var

NovoIndex : Integer;

begin

if not (ListBox1.ItemIndex = ListBox1.Items.Count -1) then

begin

NovoIndex := ListBox1.ItemIndex+1;

ListBox1.Selected[NovoIndex];

ListBox1.ItemIndex := NovoIndex;

ListBox1.SetFocus;

Label1.Caption := ListBox1.Items.Strings[ListBox1.itemindex];//mostra o nome do item selecionado no label

Edited by Gabrielllll
Link to comment
Share on other sites

  • 0

o codigo que te passei, te da o nome de todos os itens e subitens do treeview ... basta fazer um if para testar se no percurso da lista, ele chegou no item que voce esta querendo... depois basta selecionar o item que voce esta querendo

dica: é praticamente a mesma coisa que voce fez com o listbox ... pense um pouco, caso não consiga, te dou uma ajuda depois.

abraço

Link to comment
Share on other sites

  • 0

Olha jhonas o código que você passo para min ele so ta mostrando apenas os items, os subitems aqui não esta funcionando não pois tem varios subsitems porque e um resource hack...

aqui consegui fazer ele selecionar RCDATA mais quando vai continuar percorrer da erro por causa for I := 0; que esta index 0

for i := 0 to TV.Items.Count -1 do

if TV.Items.text = 'RCDATA' then

begin

TV.Select(TV.Items);

sleep(1000);

TV.Items.Item.Selected := True;

ta fodz ¬¬ esse treeview jhonas da uma ajuda ai fera para eu continuar o projeto aguardo =/ já fiz de tudo ...

Edited by Gabrielllll
Link to comment
Share on other sites

  • 0
já fiz de tudo ...
voce já testou somente o código que te passei ???

código que você passo para min ele so ta mostrando apenas os items, os subitems aqui não esta funcionando não pois tem varios subsitems porque e um resource hack...

o código mostra somente os nós filhos, mas pode mostrar tambem os nós pais ... eu quero que voce entenda a lógica do código ... ( depois fica mais facil para selecionar um item ou subitem )

OBS: Sei que voce tem pressa de resolver o seu problema, mas vamos com calma, pois tambem tenho tarefas a cumprir e me falta tempo para ser mais detalhista... ok ?

abraço

Link to comment
Share on other sites

  • 0

Utilizando o componete, ele busca na tabela do banco, os itens que estão como boolean e então deve checar para item ao carrgar no form, mas não esta carregando o avo.


if TVMenuPerfil.Items.Item.Text<>'' then
begin
Node1 := TJvTreeNode(TVMenuPerfil.Items.Item);
Node1.Checked := True;
TVMenuPerfil.Refresh;

try
if TVMenuPerfil.Checked[TVMenuPerfil.Items.Item ] then
begin
nFilho := Node1;
nPai := nFilho.GetPrev;
nAnt := nPai;
nAntAvo:=nAvo;
nAvo:= nPai.GetPrev;;
if (nPai <> nil) and (nFilho.HasAsParent(nPai)) then
begin
TJvCheckTreeView(FormCadastroPerfil).Checked[nPai] := True;

end
else
begin
while ((not nFilho.HasAsParent(nPai)) or (not nAnt.HasAsParent(nPai))) and (nPai <> nil) do
begin
nAnt := nPai;
nPai := nAnt.GetPrev;
end;
end;
if (nPai <> nil) and (nFilho.HasAsParent(nPai)) then
begin
TJvCheckTreeView(FormCadastroPerfil).Checked[nPai] := True;

end;
///avo checado
if (nAvo <> nil) and (nPai.HasAsParent(nAvo)) then
begin
TJvCheckTreeView(FormCadastroPerfil).Checked[nAvo] := True;

end
else
begin
while ((not nPai.HasAsParent(nAvo)) or (not nAntAvo.HasAsParent(nAvo))) and (nAvo <> nil) do
begin
nAntAvo := nAvo;
nAvo := nAntAvo.GetPrev;
end;
end;
if (nAvo <> nil) and (nPai.HasAsParent(nAvo)) then
begin
TJvCheckTreeView(FormCadastroPerfil).Checked[nAvo] := True;
end;
TVMenuPerfil.Refresh;
end;
except

end;
end;

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...