wyszukiwanie elementów w ListBox na podstawie podanego cią

0

Witam! Mam problem. Mianowicie napisałem program, w którym można stworzyć sobie listę dowolnych rzeczy podzielonych na kategorie. Wszystkie kategorie znajdują się w jednym komponencie ListBox. Po kliknięciu na kategorię w drugim ListBox'ie wyświetlają mi się elementy. Wszystko to są elementy typu string. Teraz chcę napisać procedurę, która na podstawie podanego ciągu znaków znajdzie wszystkie stringi ze wszystkich kategorii, które zawierają podany ciąg (coś jak wyszukiwarka) i przypisać te elementy do komponentu ListView według wzoru: KATEGORIA | ELEMENT. Wiem jak znaleźć elementy, które są identyczne z podanym ciągiem, ale nie potrafię znaleźć tych, które go zawierają (np. ciąg znaków to 'cztery' i znajduje mi element 'cztery' w kategorii 'nowa', ale już elementu 'cztery pory roku' w kategorii 'stara' nie znajduje) ;( Pomóżcie proszę

0
var
 a,b:integer;
begin
for a:=Listbox1.Items.Count-1 downto 0 do
 for b:=Listbox2.Items.Count-1 downto 0 do begin
  if pos(Listbox1.Items[a], Listbox2.Items[b]) >0
then begin
//wpisuj do Listview[a]
//Caption jako Kategoria, Subitem jako Element

A do Listview chyba wiesz jak zrobić już?

Pisane z głowy, więc daję 99,9% że ten kod działa, sprawdź.

0

Teoretycznie działa. Wyświetla mi elementy w listview, ale nie zawierają one podanego słowa. A poza tym są wyświetlane co drugą linijkę. Mimo wszystko wielkie dzięki za pomoc.

Podaje cały kod tego unita:

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, SplitUnit;

type
  Twyszukaj = class(TForm)
    autor: TGroupBox;
    ksiazka: TGroupBox;
    bSzukaj: TButton;
    bZamknij: TButton;
    autortekst: TEdit;
    ksiazkatekst: TEdit;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure bZamknijClick(Sender: TObject);
    procedure bSzukajClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  wyszukaj: Twyszukaj;

implementation

uses Unit1, Unit5;

{$R *.dfm}

procedure Twyszukaj.bZamknijClick(Sender: TObject);
begin
  Close;
end;

procedure Twyszukaj.bSzukajClick(Sender: TObject);
var
  szukany_autor:TListBox;
  i,j,k:Integer;
  Item: TListItem;
begin
  szukany_autor:=TListBox.Create(self);
  szukany_autor.Parent:=self;
  szukany_autor.Visible:=false;
  if (autortekst.Text='') and (ksiazkatekst.Text='') then
    ShowMessage('Wypełnij conajmniej jedno z pól!')
  else
    if (autortekst.Text<>'') and (ksiazkatekst.Text='') then
      if lista.autor.Items.IndexOf(autortekst.Text) <= -1 then
        ShowMessage('Podany autor nie znajduje się w bazie!')
      else
        begin
          lista.autor.Selected[lista.autor.Items.IndexOf(autortekst.Text)]:=true;
          lista.ksiazki.Items.LoadFromFile('ksiazki\\' + autortekst.Text + '.txt');
          lista.panel.Panels[2].Text:='Ilość książek autora: ' + IntToStr(lista.ksiazki.Items.Count);
        end
    else
      if (autortekst.Text<>'') and (ksiazkatekst.Text<>'') then
        if lista.autor.Items.IndexOf(autortekst.Text) <=-1 then
          ShowMessage('Podany autor nie znajduje się w bazie!')
        else
          begin
            lista.ksiazki.Items.LoadFromFile('ksiazki\\' + autortekst.Text + '.txt');
            if lista.ksiazki.Items.IndexOf(ksiazkatekst.Text) <=-1 then
              begin
                lista.autor.Selected[lista.autor.Items.IndexOf(autortekst.Text)]:=true;
                lista.panel.Panels[2].Text:='Ilość książek autora: ' + IntToStr(lista.ksiazki.Items.Count);
                ShowMessage('Podana książka nie znajduje się w bazie książek tego autora!');
              end
            else
              begin
                lista.autor.Selected[lista.autor.Items.IndexOf(autortekst.Text)]:=true;
                lista.ksiazki.Selected[lista.ksiazki.Items.IndexOf(ksiazkatekst.Text)]:=true;
                lista.panel.Panels[2].Text:='Ilość książek autora: ' + IntToStr(lista.ksiazki.Items.Count);
              end;
          end
        else
          if (autortekst.Text='') and (ksiazkatekst.Text<>'') then
            begin
            for k:=1 to lista.autor.Items.Count do
              begin
              szukany_autor.Items.LoadFromFile('ksiazki\\' + lista.autor.Items[k-1] + '.txt');
              for i:=lista.autor.Items.Count-1 downto 0 do
                for j:=szukany_autor.Items.Count-1 downto 0 do begin
                  if pos(lista.autor.Items[i], szukany_autor.Items[j]) >0
                    then begin
                      item:=znalezione.lista_znalezionych.items.Add;
                      item:=znalezione.lista_znalezionych.items.add;
                      item.caption:=lista.autor.items[i];
                      item.subitems.add(szukany_autor.Items[j]);
                    end;
               end;
                end;
              znalezione.Show
            end;
           end;

end.

Ma ktoś jeszcze jakiś pomysł??

1 użytkowników online, w tym zalogowanych: 0, gości: 1