Avatar billede armena Nybegynder
07. februar 2003 - 18:53 Der er 11 kommentarer og
1 løsning

Søg i Treeview

Jeg har følgende på min form:

-TTreeView
-TEdit
-TButton

Når man indtaster et søge ord i TEdit og derefter trykker på TButton, så skal den kunne finde et sted i TTreeView hvor søgeordet står. Hvordan kan man gøre det?

På forhånd 1000 tak :)

MVH.
armena
Avatar billede armena Nybegynder
07. februar 2003 - 21:50 #1
Prøvede sådan her:

function GetNodeByText
(HTML : TTreeView; AValue:String; AVisible: Boolean): TTreeNode;
var
    Node: TTreeNode;
begin
  Result := nil;
  if HTML.Items.Count = 0 then Exit;
  Node := HTML.Items[0];
  while Node <> nil do
  begin
    if UpperCase(Node.Text) = UpperCase(AValue) then
    begin
      Result := Node;
      if AVisible then
        Result.MakeVisible;
      Break;
    end;
    Node := Node.GetNext;
  end;
end;

{$R *.dfm}

procedure TForm1.soegknapClick(Sender: TObject);
var
  tn : TTreeNode;
begin
  tn:=GetNodeByText(HTML,soegfelt.Text,CheckBox1.Checked);
  if tn = nil then
    ShowMessage('Not found!')
  else
    begin
      HTML.SetFocus;
      tn.Selected := True;
    end;

end;

Men det virker så kun sådan at den finder noget hvis man skriver præcist det samme som en item hedder. Dvs. at hvis der en item som hedder: <form></form>, så SKAL man skrive det, for at den finder den item. Ellers så siger den not found. Og det er sådan den kode virker.

Hvordan gør jeg så sådan at den søger efter alt, selvom man også skrive "b" eller "form", eller hvad som helst. Den skal bare find en item der indholder ord/bogstav som man har indtastet i edit'en.

Håber i kan hjælpe udfra den kode :)
Avatar billede armena Nybegynder
07. februar 2003 - 21:51 #2
Forresten:

-HTML    : Treeview'en
-soegfelt : Edit'en
Avatar billede Per Skalshøi Nybegynder
10. februar 2003 - 12:35 #3
i stedet for:

if UpperCase(Node.Text) = UpperCase(AValue) then

kunne du prøve:

if AnsiContainsText(Node.Text, AValue: string) then
Avatar billede armena Nybegynder
10. februar 2003 - 13:57 #4
skalshoj>
den melder det her:
[Error] Main.pas(100): Undeclared identifier: 'AnsiContainsText'
Avatar billede Per Skalshøi Nybegynder
12. februar 2003 - 08:02 #5
Glemte at tilføje at du skal have:

StrUtils

med i din uses
Avatar billede armena Nybegynder
12. februar 2003 - 12:57 #6
Skalshoi> den melder:
[Error] Main.pas(142): ')' expected but ':' found
Ved "AVaulue:"
Avatar billede ALS Praktikant
14. februar 2003 - 00:31 #7
Jammen, så prøv med:

if AnsiContainsText(Node.Text, AValue) then

*hehe* Der skal jo ikke være nogen type-erklæring der ;o)
Avatar billede Per Skalshøi Nybegynder
14. februar 2003 - 07:23 #8
Cut and paste kan jo være noget l... :-))
Avatar billede armena Nybegynder
14. februar 2003 - 13:23 #9
Okay, nu virker det :)
Men hvordan gør jeg sådan at hvis jeg trykker på TButton igen, så skal den finde et andet sted hvor søgeordet indholder? En slags FindNext funktion.
Avatar billede ALS Praktikant
14. februar 2003 - 14:25 #10
Du ændre din "while Node <> nil do", så man fortsætter fra det sted man forlød løkken sidst.
Det er for øvrigt en noget ustruktureret programmering at afbryde en løkke med et "break"
Avatar billede armena Nybegynder
14. februar 2003 - 23:05 #11
ib-rene-cario> kan du ikke hjælpe med kode ? forstår ikke helt hvordan jeg skal gør det :(
Avatar billede ALS Praktikant
16. februar 2003 - 13:12 #12
Jeg har ikke lyst til at lave programmet for dig. Det lærer du ikke selv noget ved.
Som sagt er det din While-løkke du skal kikke på :o)

PS: skalshoi har besvaret dit oprindelige spørgsmål.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester