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
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ł??