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:
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:
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ß
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

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ß