Dotaz na hledání v Treeview

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Kája 28. 10. 2005 18:11

Poraďte prosím, jsem začátečník. mám funkci na hledání v Treeview, ale najde pouze první záznam. Potřebuji, aby mě našla a označila buďto postupně i ty další, anebo označila všechny najednou. Jak mám změnit používanou funkci.

function TForm1.TreeViewSearch(TV: TTreeView; SItem: string): TTreeNode;
var
i: Integer;
iItem: string;
begin
Result := nil;
if (TV = nil) or (SItem = '') then Exit;
for i := 0 to TV.Items.Count - 1 do
begin
iItem := TV.Items[i].Text;
if SItem = iItem then
begin
Result := TV.Items[i];
Exit;
end;
end;
end;

procedure TForm1.ToolButton5Click(Sender: TObject);
begin
TreeView1.Selected := TreeViewSearch(TreeView1,Edit1.Text);
Treeview1.SetFocus; // označí cíl
end;


Díky za rady.
Karel
Kája
Kolemjdoucí

Odeslat příspěvekod JanFiala 28. 10. 2005 18:59

Protoze v tom kodu mas tohle:
Kód: Vybrat vše
if SItem = iItem then
begin
  Result := TV.Items[i];
  Exit;
end;

tak samozrejme po nalezeni prvniho vyskytu konci. Pokud odstranis ten "Exit;" tak bude v hledani pokracovat.
Takove hledani je ale strasne neefektivni, protoze pristupujes v cyklu na index TTreeNode a kazdy pristup na
Kód: Vybrat vše
iItem := TV.Items[i].Text;

zpusobi dalsi cyklus, vyhledani node a jeho vraceni.
Podivej se na metody GetFirstNode(), GetNext() apod.

Za dalsi:
Kód: Vybrat vše
Treeview1.SetFocus; // označí cíl[/c

neslouzi k oznaceni cile, ale k obycejnemu nastaveni Focus (kurzoru) na Treeview1.

Doporucuji ti, abys misto slepeho kopirovani kodu "odnekud" zkusil prstudovat chovani TTreeView, precetl si aspon serial "programujeme v Delphi", ktery vychazel na Zive.cz a pak pokracoval
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků