ďťż

Ładny brzuch

Mam problem z wyszukiwaniem ListView. Próbowałem wszystkich kodów, które wyszukałem na tym forum, ale niestety.... Mianowicie mam takie coś: Na Form1 mam ListView. Na Form2 mam EditSzukaj i BtnSzukaj. Chce, aby po wpisaniu w EditSzukaj jakiegoś ciągu znaków i przyciśnięcie przycisku (BtnSzukaj) wyszukało mi na Form1 w ListView i zaznaczyło. Jeśli nie znajdzie, to żeby wyświetliło mi komunikat, że nie znalazło.
Bardzo prosze o pomoc i o konkretne kody. Dopiero się uczę w programowaniu, więc dla Was może się to wydawać łatwe, dla mnie czarna magia <_<
Pozdrowienia i zgóry Serdecznie dziękuję.



Pisane z głowy, także mogą być pewne błędy w nazewnictwu:
procedure TForm2.BtnSzukajClick(Sender: TObject); var i, licznik: integer; begin licznik := 0; for i:=0 to Form1.ListView.ItemCount-1 do begin Form1.ListView.Items[i].Selected := false; if pos(EditSzukaj.Text, Form1.ListView.Items[i].Caption) then begin Form1.ListView.Items[i].Selected := true; licznik := licznik+1; end; end; if licznik=0 then showmessage('nic nie znalazlem'); end;
Użytkownik pbnan edytował ten post 25 listopad 2006, 19:03

Pisane z głowy, także mogą być pewne błędy w nazewnictwu:
procedure TForm2.BtnSzukajClick(Sender: TObject); var i, licznik: integer; begin licznik := 0; for i:=0 to Form1.ListView.ItemCount-1 do begin Form1.ListView.Items[i].Selected := false; if pos(EditSzukaj.Text, Form1.ListView.Items[i].Caption) then begin Form1.ListView.Items[i].Selected := true; licznik := licznik+1; end; end; if licznik=0 then showmessage('nic nie znalazlem'); end;

[Error] Search.pas(35): Undeclared identifier: 'ItemCount' :(

To może ItemsCount tam podstaw... Ja naprawdę nie pamiętam, w każdym razie ma być tam ilość itemów z ListView... Trochę mógłbyś się wysilić <_<




To może ItemsCount tam podstaw... Ja naprawdę nie pamiętam, w każdym razie ma być tam ilość itemów z ListView... Trochę mógłbyś się wysilić <_<
Probowałem, ale to samo :( Sorry, że tak prosze, ale ja dopiero się uczę.


Probowałem, ale to samo :( Sorry, że tak prosze, ale ja dopiero się uczę.
ListView.Items.Count

No to ostatnia szansa...
for i:=0 to Form1.ListView.ItemCount-1 do <- w tej linii wykasuj ItemCount i wpisz może Items.Count
//pamiętaj, musi zostać -1
////spóźniony, jak zwykle :)
Użytkownik pbnan edytował ten post 25 listopad 2006, 19:21
Dobra to już przeszło :)
Następny problem z if pos(EditSzukaj.Text, Form1.ListView.Items[i].Caption) then
[Error] Search.pas(38): Type of expression must be BOOLEAN
Myślałem, że może wina ")" więc go usunołem, ale znów błąd: [Error] Search.pas(38): ')' expected but 'THEN' found
To co teraz?

if pos(EditSzukaj.Text, Form1.ListView.Items[i].Caption)<>0 then
albo
if pos(EditSzukaj.Text, Form1.ListView.Items[i].Caption)<>false then
Użytkownik pbnan edytował ten post 25 listopad 2006, 19:31
Skomplikowało, ale gdy uruchamiam program i kliknę Szukaj to:
Access violation at address 004361A0 in module 'Project1.exe'. Read of address 00000004.
Co znów jest źle? :(

Masz coś w ListView?
Jeśli tak, pokaż dokładnie kod tej metody onclick przycisku btnSzukaj.

No tutaj cały kod:
procedure TSzukaj.BtnSzukajClick(Sender: TObject); var i, licznik: integer; begin licznik := 0; for i:=0 to Okno.Lista.Items.Count do begin Okno.Lista.Items[i].Selected := false; if pos(EditSzukaj.Text, Okno.Lista.Items[i].Caption)<>0 then begin Okno.Lista.Items[i].Selected := true; licznik := licznik+1; end; end; if licznik=0 then showmessage('nic nie znalazlem'); end;
Jak to czy coś mam w ListView?
Użytkownik mateok edytował ten post 25 listopad 2006, 19:35
Pisałem wyżej, żebyś pamiętał o -1. Tak więc:
for i:=0 to Okno.Lista.Items.Count-1 do

Na oko nie mogę znaleźć innego błędu, od tego powyższego... Pobaw się debuggerem. ;)
O co mi chodzi? Postaw kursor w linijce licznik := 0; i naciśnij [F4]. Wprowadź potrzebne dane (czyli uzupełnij ListView oraz EditSzukaj) i naciśnij przycisk Szukaj. Powinno Cię przenieść do kodu w Delphi. Naciskaj [F7] i sprawdzaj, aż wyskoczy Ci ten komunikat ("Access violation"). Pokaż, w której to linijce było.

//edit:

Jak to czy coś mam w ListView?
Jak nic nie będzie, powstanie błąd. Więc aby szukać, musisz mieć gdzie. Więc uzupełnij ListView ;)
Użytkownik pbnan edytował ten post 25 listopad 2006, 19:42
Dobrze, teraz wszystko jest ok, ale znów mam problem. Mianowicie chodzi o to, że ja mam 3 kolumny, a wyszukuje mi tylko w tej pierwszej. Chciałbym, aby wyszukiwało mi we wszystkich. Chodzi mi o:
Item.Caption Item.SubItems Item.SubItems

Po prostu zmieniasz:
if pos(EditSzukaj.Text, Okno.Lista.Items[i].Caption)<>0 then
na:
if (pos(EditSzukaj.Text, Okno.Lista.Items[i].Caption)<>0) or (pos(EditSzukaj.Text, Okno.Lista.Items[i].SubItems[0])<>0) or (pos(EditSzukaj.Text, Okno.Lista.Items[i].Subitems[1])<>0) then

DZIĘKI SERDECZNE! Chodzi :)
Ale teraz mam pytanie, bo tutaj jest ważne wprowadzanie liter (liczą się nawet te duże). Czy jest możliwość, żeby mi wyszukiwało, ale żeby nie zwracało na wielkość liter, bo czasami nie wyszuka :(

if (pos(widelowercase(EditSzukaj.Text), widelowercase(Okno.Lista.Items[i].Caption))<>0) or (pos(widelowercase(EditSzukaj.Text), widelowercase(Okno.Lista.Items[i].SubItems[0]))<>0) or (pos(widelowercase(EditSzukaj.Text), widelowercase(Okno.Lista.Items[i].Subitems[1]))<>0) then
Chyba coś takiego będzie działać :)

DZIĘKI!!!
Zadziałało :) Jeszcze raz serdeczne dzięki!

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