Sprawdzenie czy dwa łańcuchy nie są takie same

0

Witam.

Mam problem. Potrzebuję zastosować kompletną odwrotność "=". Chcę by mój program porównywał str1 z str2. Gdy one są te same to żeby nie robił nic, a gdy się różnią to wtedy żeby robił to co ja tam nabazgram.
Słyszałem o opcji comparestr, lecz nie wiem czy w dobrym kierunku idę i czy o to chodzi no i nie wiem jak to zastosować. Coś tam próbowałem, jednak nie wyszło.

Dam może kod:

var
  i:integer;
begin
  for i := 0 to listbox2.items.count -1 do
  begin
    if (comparestr((listbox2.items[i]), edit1.text) = 0) then
    begin
      listbox2.items.add('Spoko');
    end;
  end;
end;

Dzięki.

1

Możesz skorzystać z CompareStr i sprawdzić czy rezultat jest różny od zera:

if CompareStr(ListBox.Items[I], Edit.Text) <> 0 then

Możesz też skorzystać z funkcji SameStr i operatora negacji:

if not SameStr(ListBox.Items[I], Edit.Text) then

Możesz też porównać dwa łańcuchy za pomocą zwykłego operatora:

if ListBox.Items[I] <> Edit.Text then

Wybierz sobie jeden sposób.

0

Sprawdziłem właśnie i niestety "SameStr" nie działa na Delphi 7.
Co znaczy "rezultat jest różny od zera"?

Chcę to zrobić w timerze.
Jeżeli ostatnia linijka listboxu = edit2.text to żeby nie robiło się nic.
Jeżeli natomiast ostatnia linijka listboxu będzie inna niż edit1.text to wtedy ten tekst z edit1 pojawił się w listboxie.
Nie chcę robić tego w ten sposób:
listbox1.items.add(edit1.text);, gdyż wtedy pojawi się na moim listboxie wielka i długa lista bo timer będzie po prostu to dodawać na około.

0

Sprawdziłem właśnie i niestety "SameStr" nie działa na Delphi 7.

Trzeba było napisać, że o Delphi7 chodzi...

Co znaczy "rezultat jest różny od zera"?

Funkcja CompareStr zwraca liczbę (0 jeśli ciągi są identyczne lub liczbę różną od zera, jeśli ciągi się różnią), więc należy ją porównać do czegoś.

0

W sumie to jestem w punkcie wyjścia.
Zastosowałem właśnie comparestr na samym początku.
Powiem tak:
Działała to dobrze gdy 1 linia listboxa jest inna niż edit1.
To znaczy tak:
Gdy pierwsza linia listboxa nazywa się np "Maciek", to gdy Edit1.text to "Maciek" to wtedy do listboxa nie dodaje się nic.
Gdy jednak pierwsza linia listboxa to "Witam" to wtedy dany text z edit1 jest dodawany non stop do listboxa (timerem).
To znaczy (o ile się nie mylę) że program czyta wszystkie linie listboxa i gdy jakaś się różni to wówczas wtedy jest dodawana zawartość edit1.
Właśnie dlatego wygląda to w ten sposób:
Witam (1 linia)
Maciek
Maciek
Maciek
Maciek
Maciek
...
...

Chce by było tak:
Witam
Maciek
... czeka na zmianę textu w edit1. Gdy on się zmieni to wtedy żeby był wpisany kolejny text np.
Jak Leci?

Dzięki.

1

W takim razie wystarczy tyle:

if (ListBox.Items.Count = 0) or (ListBox.Items[ListBox.Items.Count - 1] <> Edit.Text) then
  ListBox.Items.Add(Edit.Text);

Ale po co ten timer? Lepiej by było, gdybyś napisał ogólnie co tworzysz i zapytał jak zrobić to najlepiej.

0

Faktycznie. Proste rozwiązanie o którym nawet nie pomyślałem.

Dzięki!
Temat można zamknąć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.