2 Listboxy i usuwanie emaili z serwera

0

Witam.
Na formie mam położone dwa listboxy.
W 1 mam adresy email, które nie lubię gdy przychodzą na mój serwer pocztowy, czyli krótko mówiąc w Listbox1 jest czarna lista adresów email.

W 2 są wyświetlane listy przychodzące. Ten listbox wyświetla adresy email tych listów konkretnie pisząc.

Chcę zrobić aby adresy z listbox2 były porównywane z adresami z listbox1 (czarna lista) i gdy znajdą się adressy takie jak w czarnej liście to usuwa te listy z serwera.

Przeszukałem forum i znalazłem taki kod, ale on chyba jest źle napisany i nie odpowiada moim oczekiwaniom. Czy ktoś ma jakiś pomysł na kodzik? Dobre będą też jakieś wskazówki.

Napisałem procedurkę, która usuwa Itemy z Listboxa gdy w dwóch listboxach wystąpią te same adresy email ale często występuje błąd: Index is out of bound (jakaś_cyfra). Czy wie ktoś jak to naprawić?

kod taki:

var i,j:integer;

begin
for i:=LBox1.Items.Count-1 downto 0 do begin
for j:=LBox2.Items.Count-1 downto 0 do
if (LBox1.Items.Strings[i]=LBox2.Items.Strings[j])
then LBox1.items.Delete(i);
 end;
    end; 

A tu kod który znalazłem na forum, ten co mi nie odpowiada za bardzo

var sl : TStringList; //lista adresow;
...
 
  pop.Connect;
  For">for i := pop.CheckMessages downto 1 do
  begin
    msg.Clear;
    if pop.Retrieve(i,msg) then
    begin
      if sl.IndexOf(msg.subject)<>-1 then
        pop.Delete(i);  //usuwa email o indeksie "i" z serwera 
    end;
  end;
  pop.Disconnect;
0

Uwagę to masz w związku z tym że na serwerze nie ma listu o wskazanym indeksie. Po prostu Twój program pobrał index z czarnej listy np 3 i chce usunąc list o tym indeksie z serwera - a serwer przykładowo ma jeden list i bedzie to index 1
Ja bym to zrobił tak:
Pobierał nagłowki listów z serwera ... porównywał np. nadawcę z czarną listą, a jesli taki jest np [email protected] to pobierał pod jakim indexem znajduje sie ten list na serwerze - i wtedy usuwał list o takim indeksie.

0

Problem jest w tym, ze usuwasz pozycje z ListBoxa1 zamiast ListBoxa2, ten kod powinien dzialac dobrze:

var i,j:integer;
begin
for i:=LBox1.Items.Count-1 downto 0 do begin
for j:=LBox2.Items.Count-1 downto 0 do
if (LBox1.Items.Strings[i]=LBox2.Items.Strings[j])
then LBox2.items.Delete(j);
 end;
    end; 

Ale lepszym rozwiazaniem calego zagadnienia jest sposob kolegi Pytajnik.

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