Pętla for to do Kopiowanie Pos do memo

0

Witam mam drobny problem mianowicie ściągam maile dokładnie nagłówki i adresatów do Memo1 poprzez pętle for to do

tak wygląda proces ściągania

  if POP3.Connected then
  begin
    ilosc:=POP3.CheckMessages; 
      for i:=1 to ilosc do   
        begin
          application.processmessages;
          Idmessage1.Clear;
          POP3.RetrieveHeader(i,Idmessage1); 
           dodaj_maila;
           StatusBar1.SimpleText:=('Ilość odebranych: '+(inttostr(i+1)));

        end;
      POP3.Disconnect;
      StatusBar1.SimpleText:='Zakonczono Odebrano: '+(inttostr(i)+' maili :)');
    end;
  end;

I wszystko ladnie wrzuca wszystkie maile

w formacie jaki mam w procedurze

dodaj_maila;
procedure dodaj_maila;
var
  i:integer;
begin
  Memo1.Lines.ADD('Temat: '+IdMessage1.Subject+' Od: '+' ('+IdMessage1.From.Address+')');
end;

i kombinuje żeby dorobić do tej procedury szukanie poprzez POS adresatów jakie pojawiły sie w memo1 i wyświetlenie ich pojedynczo w Listboxie jesli mam zaznaczonego checkboxa

 If CheckBox1.Checked =true    then begin
           for i := 0 to memo1.lines.count - 1 do begin
           if Pos('@wp.pl',memo1.lines[i]) <>0 then    begin
            Listbox1.Items.Add('Z POCZTY WP'); 
 end;
           end;
          end;
          end;  
          

No i jeśli znajdzie w Memo1 emaila od @wp.pl to wstawia mi do lisboxa ale ze jest to pętla to wstawia mi cały czas.

Teraz do sedna co chciałbym osiągnać chciałbym do procedury

dodaj_maila;

dodać żę jeżeli w Memo1 pojawi się np adresat @wp.pl to dodaje mi go do listboxa ale tylko 1 raz, a nie cały czas jak to robi do tej pory, i tak samo inne maile które sobie zdefiniuje np @tlen.pl @onet.pl itp...

Troche namotałem także przepraszamz góry za zamieszanie
Dziękuje i Pozdrawiam
Marek

0

Teraz do sedna co chciałbym osiągnać chciałbym do procedury dodaj_maila dodać żę jeżeli w Memo1 pojawi się np adresat @wp.pl to dodaje mi go do listboxa ale tylko 1 raz

Wstaw instrukcję Break po dodaniu pozycji do ListBox (w jednym bloku begin .. end);

0

TO już próbowałem nie pomaga

If CheckBox1.Checked =true    then begin
           for i := 0 to memo1.lines.count - 1 do begin
           if Pos('@wp.pl',memo1.lines[i]) <>0 then    begin
            Listbox1.Items.Add('Z POCZTY WP'); 
break;
 end;
           end;
          end;
          end;  

Dalej dodaje mi cały czas do Lisboxa gdyż pętla która ściąga maile cały czas działa i procedura odpala się na nowo i przeszukuje Memo1 od początku i dodaje do listboxa już takie kombinacje z tym szły że nie mam siły do tego pomocy..

0

To może nie sprawdzaj memo tylko właśnie odczytany adres mail i dodawaj do memo oraz jeśli pasuje do wzorca to również do list boxa?

procedure dodaj_maila;
var
  i:integer; // <- po co Ci ta zmienna? O.o
  Linia : String;
begin
  Linia := 'Temat: '+IdMessage1.Subject+' Od: '+' ('+IdMessage1.From.Address+')'
  If CheckBox1.Checked then
    if Pos('@wp.pl',Linia) <>0 then
      Listbox1.Items.Add('Z POCZTY WP');
  Memo1.Lines.ADD(Linia);
end;

EDIT:
@_13th_Dragon
masz racje z tym CheckBox1.Checked = true :P tak to jest jak się tylko kopiuj wklej robi i za bardzo nie czyta co się kopiuje :P

0
if CheckBox1.Checked then
begin
   for i := 0 to memo1.lines.count - 1 do
   begin
     if (Pos('@wp.pl',memo1.lines[i]) <>0)and(Listbox1.Items.IndexOf('Z POCZTY WP')<0) then Listbox1.Items.Add('Z POCZTY WP'); 
   end;
end;

co do zapisu: if CheckBox1.Checked=true then to:
wynik działania: CheckBox1.Checked=true też należy sprawdzić czy jest prawda, więc zapisujemy: (CheckBox1.Checked=true)=true
ale wynik działania: (CheckBox1.Checked=true)=true też trzeba sprawdzić, czyli: ((CheckBox1.Checked=true)=true)=true
ale wynik działania: ((CheckBox1.Checked=true)=true)=true ...
Jak skończysz poprawiać daj znać ;P

0

witaj... jeśli chcesz coś dodać jeden raz... to utwórz zmienną typu boolean i uwzględnij ją w warunku wypisywania... PosDodano := True; i po kłopocie....

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