Zaznaczanie wiersza w ListBox.

0

Witam,

otóż mam taki kod

  tper=record
   imie:string;
   nazwisko:string;
   lata:integer;
   miej:string;
   end;
var
  Form1: TForm1;
  n:integer;
  g:array[1..5] of tper;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
n:=strtoint(edit1.Text);
g[n].imie:=edit2.Text;
g[n].nazwisko:=edit3.Text;
g[n].lata:=strtoint(edit4.Text);
g[n].miej:=edit5.text;

listbox1.Items.Add(edit1.Text+g[n].imie+','+g[n].nazwisko+','+inttostr(g[n].lata)+','+g[n].miej);



end;

procedure TForm1.Button2Click(Sender: TObject);

begin
n:=strtoint(edit6.Text);
edit7.Text:=g[n].imie+','+(g[n].nazwisko)+','+inttostr(g[n].lata)+','+g[n].miej;
end;


end.

Zastanawiam się jak można do tego podejść aby Button2 zamiast pokazywać szukany wynik w polu edit podświetlał go w listboxie (przy np. takich samych imionach zostały by podświetlone dwie opcje) = oczywiście wiem że muszę się liczyć tu z pętlą ;]. Reasumując chce aby po wpisaniu w pole szukaj: np. imienia podświetlały się wszystkie osoby o danym imieniu i tak samo jeśli będę szukał pod względem daty urodzenia itd.

Więc w tej małej kwestii proszę o nakierowanie na dany punkt jak należało by to zrobić.

Pozdro

0

Zastąp TListbox na TVirtualTreeView - darmowy komponent. Wtedy nie będzie problemów z wyszukiwaniami.
Jak chcesz zachować ListBoxa to musisz pobrać po olei napisy z listboxa:
for I:=0 to ListBox1.Count-1 do Str:=ListBox1.Items[i];
Sparsować Str na imie nazwisko itp
jak natrafisz na odpowiednie to konczysz pętle i dajesz:
ListBox1.ItemIndex:=I;

0

Wybierasz MultiSelect i masz coś takiego jak Selected gdzie jest tablica podświetlonych pozycji, zmieniasz ją tak żeby podświetlone były tylko te które chcesz.

Zastąp TListbox na TVirtualTreeView - darmowy komponent. Wtedy nie będzie problemów z wyszukiwaniami.

No bo do prostego projektu potrzebuję masy komponentów. Może i wyjdę na nieułatwiającego sobie życia ale zazwyczaj używam Listboxa z podobną procedurą wyszukującą (chociaż wyszukuję wśród tablicy zazwyczaj). Po prostu LCL/VCL to raczej nie moja bajka, żebym się bawił w zaawansowane komponenty etc.

0

@-321oho, po pierwsze TTreeView jest tak potężnym narzędziem że ani rusz. Po drugie gdyby pytający mógł dokładnie podać co szuka to ListBox ma na to sposób:
ListBox1.ItemIndex:=ListBox1.Items.IndexOf('szukany tekst');
Ale tu w jednym wierszu Nr wewnętrzy, Imie, Nazwisko, wiek, miejscowość wszystko w jednym wierszu, jednym słowem bajzel.

0
_13th_Dragon napisał(a):

for I:=0 to ListBox1.Count-1 do Str:=ListBox1.Items[i];
Sparsować Str na imie nazwisko itp
jak natrafisz na odpowiednie to konczysz pętle i dajesz:
ListBox1.ItemIndex:=I;

Sory, ale można troszkę jaśniej, dopiero zaczynam z delphi to mój 2 dzień ^^

0
for I:=0 to ListBox1.Count-1 do // po wszystkich elementach ListBox'a
begin
  Str:=ListBox1.Items[i]; // Str to i-ty wiersz z listboxa
  
end;
ListBox1.ItemIndex:=NrWiersza; // podświetla w ListBox'ie wiersz o numerze NrWiersza
0
_13th_Dragon napisał(a)

@-321oho, po pierwsze TTreeView jest tak potężnym narzędziem że ani rusz.

GBNero napisał(a)

Sory, ale można troszkę jaśniej, dopiero zaczynam z delphi to mój 2 dzień ^^

Sam oceń, czy jemu potrzebne w drugim dniu nauki potężne narzędzia; Poza tym, na tak prosty problem TListBox wystarczy, nie trzeba armaty na muchę;

Innym rozwiązaniem jest wykorzystanie listy obiektów tej kontrolki, ale w drugim gniu to powinieneś uczyć się struktury, a nie brać się od razu za okienka;

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