POP3 mit ClientSocket (StringGrid)

WhiteStar99

Mitglied
Hallo!
ich bin gerade dabei, ein E-Mail Programm mit Hilfe der ClientSocket Komponente (ja ich weiß, dass es auch eine POP3 Komponente gibt) zu programmieren.
Ich bin nun soweit, dass ich die Verbindung zum POP Server schon aufgebaut habe und die e-mails, falls vorhanden, automatisch in ein StringGrid eingetragen werden!
Das Problem ist: Ich möchte nun per Mausklick auf eine Zeile im StringGrid genau diese e-mail dann auswählen, damit sie unten drunter angezeigt wird (EAbsender, EBetreff, Mmail (Memofeld)).
Nur ich weiß nicht, wie ich meine zwei Prozeduren procedure TForm1.ClientSocketRead und procedure TForm1.StringGrid1SelectCell "verbinden" kann.

Hier einmal ein paar Codeausschnitte:

Code:
procedure TForm1.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);

var  s: string;
     p1, p2: integer;

begin
  with ClientSocket.Socket do begin

    //vom Server zurückgegebene Strings
    s:= ReceiveText;
    s:= copy(s,0,length(s)-1);

    // Log / StatusBar
    StatusBar1.SimpleText := Zustand+' -> '+s;
    Memo1.Lines.Add('');
    Memo1.Lines.add(Zustand+' -> '+s);

  case Zustand of

   // USER Username -> danach Zustand U(ser) (beendet)
   'C': if copy(s,0,9) = '+OK ready' then begin
           Zustand:= 'U';
           s:='user '+Euser.text;
           Memo1.Lines.Add('');
           Memo1.Lines.Add(s);
           SendText(s+#13#10);
        end;

[...] Zustand P für Password

   // Anzahl E-Mails
   'P':begin
           p1:= pos('has',s);
           p2:= pos('visible',s);
           s:=copy(s,p1+4, p2-p1-5);
           AnzahlMails:= StrToInt(s);
           Memo1.Lines.Add('');
           Memo1.Lines.Add(IntToStr(AnzahlMails)+' E-Mails im Posteingang');
           Nr:=0;

           if Nr < AnzahlMails then begin
              s:='RETR '+ IntToStr(Nr+1);
              Memo1.Lines.Add(Zustand+' -> '+s);
              SendText(s+#13#10);
              Zustand:= 'R';
            end;

         end;

   'R': begin
           InsDate(s);
           InsSubject(s);
           InsFrom(s);
           //Nr um 1 erhöhen (zur nächsten mail gehen)
           inc(nr);

           if Nr < AnzahlMails  then begin
              s:='RETR '+ IntToStr(Nr+1);
              Memo1.Lines.Add(Zustand+' -> '+s);
              SendText(s+#13#10);
           end;

         end;


   end; //Ende case
   end; //Ende with

end;    //Ende procedure

InsDate etc sind Prozeduren, um das Datum, den Absender und den Betreff aus der E-Mail rauszuschnibbeln und schon in die jeweiligen Zellen einzufügen!
Beispiel:

Code:
procedure TForm1.InsFrom(s: string);
var p1,p2: integer;
begin

  p1:= pos('From:',s);
  p2:= pos('To:',s);
  s:= copy(s,p1+5, p2-p1-7);
  StringGrid1.Cells[0,Nr]:=s;
  StringGrid1.Cells[0,0]:='von';

end;

Jetzt fehlt mir nurnoch die:

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);

im Sinne von:
EAbsenderEmpfaenger.Text := 'testabsender' ;
EBetreff.Text := 'testsubject' ;
Mmail.Lines.Add('testtext') ;


Leider schaffe ich es nicht in der Prozedur StringGrid1SelectCell die Daten, die ich in den anderen Prozeduren erarbeitet habe, einzufügen :( (naja, den Body habe ich noch nicht rausgeschnitten, aber ich würd erstmal gerne wissen, wie ich das überhaupt realisieren kann).
Ich habe es bereits mit forward bzw einfach das Aufrufen der Prozedur in der anderen versucht, aber das will nicht so (bin auch nicht solch ein Profi).

Wäre nett, wenn mir jmd helfen könnte. Wenn ich das Problem nur beseitigt hätte, könnte ich mich an SMTP machen *seufz*

Gruß
 

Dario Linsky

Erfahrenes Mitglied
Warum nimmst Du nicht einfach ein TListView? Das ist meiner Erfahrung nach einfacher zu bedienen als ein TStringGrid.
Stell einfach die Eigenschaft ViewStyle auf vsReport ein, dann sieht das ähnlich aus wie ein StringGrid.

Ich mach das immer so, dass ich am Ende des ListViews (also ganz rechts) noch eine Spalte für die eindeutige Kennung anlege. Die ist für den Benutzer unsichtbar, kann aber über den Code ganz normal angesprochen werden.
 

WhiteStar99

Mitglied
Unser lehrer möchte aber, dass wir es mit einem StringGrid programmieren und mit dieser ClientSocket Komponente. Habe das Programm ja mit der POP3/SMTP Komponente und StringGrid schon fertig, aber er möchte es nunmal so... und jetzt weiß ich nicht, wie ich das erledigen kann :(