ďťż

Ładny brzuch

Mam problem. Chodzi oto, że na formie mamy Edita i ListBoxa. PO wpisaniu tekstu do Edita pozycje w ListBoxie mają się zredukować, ograniczyć, wyeliminować TYLKO do tych, które rozpoczynają się na tekst z Edita. Częściowe rozwiązanie znalazłem tu ( http://www.ks-eksper...ajTerms=ListBox ) przy odpowiedzi Oxi'ego. Czy ktoś pomoże mi rozwiązać ten problem do końca? Z gór THX!

K R Z E M A - spragniony wiedzy !!
GG#: 4391798
E-mail: krzema12@wp.pl



utwórz pętlę for, w której będziesz sprawdzał czy text z edita pasuje do textu w ListBoxie

//----------------------
z_forum_experta@beldzio.com
www.beldzio.com
www.beldzio.com/forum
gg :3183960

Proponowałbym utworzyć zmienną typu TStringList w której miałbyś wszystkie pozycje mogące się znaleźć w ListBox'ie. Wtedy wystarczy, że pod onchange Edita podepniesz sobie takie coś:  ListBox1.Clear;  for j:=0 to StringList.Count-1 do    if Pos(Edit1.Text, StringList.Strings[j])=1 then ListBox1.Items.Add(dane.Strings[j]);i masz to o co Ci chodziło - na bieżąco aktualizowana jest zawartość ListBox'a i jest tam tylko to co zaczyna się na litery wpisane w Edit.

 
ICQ : 245-363-570

cytat:Oxi napisał:

Proponowałbym utworzyć zmienną typu TStringList w której miałbyś wszystkie pozycje mogące się znaleźć w ListBox'ie. Wtedy wystarczy, że pod onchange Edita podepniesz sobie takie coś:  ListBox1.Clear;  for j:=0 to StringList.Count-1 do    if Pos(Edit1.Text, StringList.Strings[j])=1 then ListBox1.Items.Add(dane.Strings[j]);i masz to o co Ci chodziło - na bieżąco aktualizowana jest zawartość ListBox'a i jest tam tylko to co zaczyna się na litery wpisane w Edit.

 
ICQ : 245-363-570

Niebardzo to rozumiem. Mógłbyś mi przesłać plik projektu na krzema12@wp.pl lub pkrzemi@tlen.pl ?? W praktyce lepiej skumam ;) A jeżeli nie masz zainstalowanego Delphi, to po prostu to dokładniej wytłumacz, bo np. nie kumam tego: "j:=0". Przecież "j" to nie zmienna liczbowa, chyba, że chodziło o "j:='0'", ale to by było wtedy bez sensu. Spróbuję jeszcze sam pokombinować ;)

Z góry THX!

K R Z E M A - spragniony wiedzy !!
GG#: 4391798
E-mail: krzema12@wp.pl



cytat:Krzema napisał:
Niebardzo to rozumiem. Mógłbyś mi przesłać plik projektu na krzema12@wp.pl lub pkrzemi@tlen.pl ?? W praktyce lepiej skumam ;) A jeżeli nie masz zainstalowanego Delphi, to po prostu to dokładniej wytłumacz
Jasne, że mam zainstalowane Delphi - do podstawa w moim systemie 8)
Ale napisze Ci tu bo kodu jest niedużo - a może komuś jeszcze się na coś przyda.

A więc tak:
Wrzuć sobie na formę Edit'a i ListBox'a. W ObjectInspectorze przechodzisz na zakładke Events i dwukrotnie klikasz w polu obok onchange. Teraz przechodzisz do kodu programu i utworzoną tam procedurę:
procedure TForm1.Edit1Change(Sender: TObject); begin end;podmieniasz na tą poniżej:procedure TForm1.Edit1Change(Sender: TObject); var j : integer; begin  ListBox1.Clear;  for j:=0 to StringList.Count-1 do    if Pos(Edit1.Text, StringList.Strings[j])=1 then ListBox1.Items.Add(StringList.Strings[j]); end;Musisz jeszcze utworzyć StringList.
Dodaj ją na górze listingu w (np.) sekcji public.
 public    { Public declarations }    StringList : TStringList;Teraz w zdarzeniu OnCreate głównej formy dodajesz:  StringList := TStringList.Create;  StringList.Add('[i]jakieś słowo[/i]');  StringList.Add('[i]kolejne słowo[/i]');  StringList.Add('[i]kolejne słowo[/i]');  [i]{ itd. }[/i]  StringList.Add('[i]kolejne słowo[/i]');W zdarzeniu OnDestroy głównej formy dodajesz linijkę:
[code]
StringList.Free;
[code]
I to wszystko.

cytat:
bo np. nie kumam tego: "j:=0". Przecież "j" to nie zmienna liczbowa, chyba, że chodziło o "j:='0'", ale to by było wtedy bez sensu. Spróbuję jeszcze sam pokombinować ;)

j to zmienna typu integer - czyli przechowuje liczby całkowite. W powyższym przykładzie służy do zliczania kolejnych pętli i do wybierania kolejnych elementów z StringList'a.

ICQ : 245-363-570

Wielkie dzięki Oxi! O to mi chodziło!

Najlepiej uczyć się na własnych błędach.
GG#: 4391798 E-mail: krzema12@wp.pl WWW: http://www.krzema12.prv.pl/

Aha, i jeszcze jedno. Nie wiem, czy jest sens zakładania nowego tematu, więc jeszcze jedno pytanie napiszę tu. Jak zrobić, aby można było indetyfikować itemy po nazwie? Że nie np. ListBox1.ItemIndex := 2; tylko ListBox1.ItemNameIndex := 'Ustawienia'; ?? Coś mi się wydaje, że nie ma takiej gotowej właściwości. Czy da się to jakoś uzyskać?

Najlepiej uczyć się na własnych błędach.
GG#: 4391798 E-mail: krzema12@wp.pl WWW: http://www.krzema12.prv.pl/

ListBox1.Items.IndexOf(<tekst itema>)

Dobry programista umie przyznać się do błędu,
ale doskonały programista stara się popełniać ich jak najwięcej :)

Sajt mojej "grupy" programistycznej (inni wylecieli :)) http://chomik-programista.tripod.com

cytat:Krzema napisał:
Jak zrobić, aby można było indetyfikować itemy po nazwie? Że nie np. ListBox1.ItemIndex := 2; tylko ListBox1.ItemNameIndex := 'Ustawienia'; ?? Coś mi się wydaje, że nie ma takiej gotowej właściwości. Czy da się to jakoś uzyskać?

ListBox1.ItemIndex := ListBox1.Items.IndexOf('Ustawienia');

O to Ci chodzi ?

IndexOf zwraca indeks pierwszego napotkanego wystąpienia danego łańcucha (począwszy od 0). Jeśli podany łańcuch znajduje się na liście w kilku miejscach to zwrócony zostanie indeks tylko pierwszego z nich.

ICQ : 245-363-570
TLEN: oxisoft

cytat:Oxi napisał:
Jeśli podany łańcuch znajduje się na liście w kilku miejscach to zwrócony zostanie indeks tylko pierwszego z nich.

Szkoda :(. Jeżeli np. mamy na liście kilka pozycji, które rozpoczynają się na tekst, który jest zawarty w "Edycie" :), to chodzi mi o to, aby zaznaczały się w tej kolejności, jakie są, czyli żeby zostały zwrócone indeksy tych pozycji, w kolejności, w jakiej następują i po kolejnych wywoływaniach tej funkcji zaznaczały się kolejne itemy. Da się to jakoś zrobić?

Najlepiej uczyć się na własnych błędach.
GG#: 4391798 E-mail: krzema12@wp.pl WWW: http://www.krzema12.prv.pl/

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •