Test si un memo est vide

Résolu
xt3 Messages postés 23 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 13 février 2006 - 26 janv. 2006 à 09:46
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 - 27 janv. 2006 à 18:21
Salut les gars,

J'ai encore un autre problème, je veux tester si le contenu d'un mémo est vide.

Est ce qu'il existe une fonction du genre memo5.lines.empty ou quelque chose comme ça qui pourrait m'aider?



PS : Je sais que je pose beaucoup de question mais ça ne fait que 10 jours que je fais de la programmation en delphi.

Veuillez m'excusez d'avance

@+

10 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 janv. 2006 à 09:55
salut,

test la propriete count de lines du memo

tu fais:

if Memo1.lines.count=0 then memovide



@+

jlen
3
xt3 Messages postés 23 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 13 février 2006
26 janv. 2006 à 10:49
Voici l'intégralité de mon script, je ne vois pas ce qui force l'envoie de l'e-mail.



unit Unit1;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, StrUtils, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,

IdTCPClient, IdMessageClient, IdSMTP, Psock, NMsmtp;



type

TForm1 = class(TForm)

Memo1: TMemo;

Memo2: TMemo;

IdSMTP1: TIdSMTP;

IdMessage1: TIdMessage;

Button1: TButton;

Memo3: TMemo;

Memo4: TMemo;

Memo5: TMemo;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Déclarations privées }

public

{ Déclarations publiques }

end;



var

Form1: TForm1;



implementation



{$R *.dfm}



Uses

IniFiles, FileUtil;



Function strtotstr(const str: string): TStringList;

var

tstr: TStringList;

begin

tstr := TStringList.Create;

tstr.Text := StringReplace(str, ' ', sLineBreak, [rfReplaceAll]);

Result := tstr;

end;





procedure TForm1.FormCreate(Sender: TObject);



var

inifile : TIniFile;

nomfic : String;

writfic : String;

lengfic : String;

excfic : String;

erreur : String;

mel : String;

melrep : String;

melsuj : String;

melport : String;

melport2 : Integer;

melserv : String;

error1 : String;

error2 : String;

error3 : String;

error4 : String;

error5 : String;

error6 : String;

error7 : String;

error8 : String;

error9 : String;

error10 : String;

impos : String;

fic : TextFile;

fic2 : TextFile;

fic3 : TextFile;

exc : TextFile;

err : TextFile;

st : String;

st2 : String;

i : Integer;

IdMessage : TiDMessage;

IdSMTP : TiDSMTP;



begin

inifile :=
TIniFile.Create(NormalDir(ExtractFilePath(Application.ExeName)) +
'arcs.ini');

nomfic :=
NormalDir(inifile.ReadString('Fichier', 'rep','')) +
IniFile.ReadString('Fichier', 'Fich', '');

writfic :=
NormalDir(inifile.ReadString('Fichier', 'rep','')) +
IniFile.ReadString('Fichier', 'writ', '');

lengfic :=
NormalDir(inifile.ReadString('Fichier', 'rep','')) +
IniFile.ReadString('Fichier', 'wc', '');

erreur :=
NormalDir(inifile.ReadString('Fichier', 'rep','')) +
IniFile.ReadString('Fichier', 'err', '');

excfic :=
NormalDir(inifile.ReadString('Fichier', 'rep','')) +
IniFile.ReadString('Fichier', 'excep', '');

mel := inifile.ReadString('Mail', 'meldest','');

melrep := inifile.ReadString('Mail', 'melrep','');

melsuj := inifile.ReadString('Mail', 'melsujet','');

melport := inifile.ReadString('Mail', 'smtpport','');

melserv := inifile.ReadString('Mail', 'smtpserver','');

error1 := inifile.ReadString('Erreur', 'err1','');

error2 := inifile.ReadString('Erreur', 'err2','');

error3 := inifile.ReadString('Erreur', 'err3','');

error4 := inifile.ReadString('Exception', 'err4','');

error5 := inifile.ReadString('Exception', 'err5','');

error6 := inifile.ReadString('Exception', 'err6','');

error7 := inifile.ReadString('Exception', 'err7','');

error8 := inifile.ReadString('Exception', 'err8','');

error9 := inifile.ReadString('Exception', 'err9','');

error10 := inifile.ReadString('Exception', 'err10','');

impos := inifile.ReadString('Imposs', 'impo','');

inifile.Free;





if nomfic = 'C:\' then begin

ShowMessage('Fichier pas trouvé');

Exit;

end;



if not FileExists(nomfic) then begin


ShowMessage('Fichier ' + NomFic + ' introuvable');

exit;

end;



AssignFile(fic, nomfic);

Reset(fic);

AssignFile(fic2, writfic);

Rewrite(fic2);



while not Eof(fic) do begin

Readln(fic, st);

st2 := MidStr(st, 42, length(st));

writeln(fic2, st2);

end;



Reset(fic2);

AssignFile(fic3, lengfic);

Rewrite(fic3);



(Memo1.Lines.LoadFromFile(writfic));



for i := 0 to Memo1.Lines.Count do begin

if (Memo1.Lines[i] = error1) or

(Memo1.Lines[i] = error2) or

(Memo1.Lines[i] = error3) then begin

writeln(fic3, Memo1.Lines[i]);


writeln(fic3, Memo1.Lines[i+1]);

end;

end;



CloseFile(fic3);



Reset(fic3);

AssignFile(err, erreur);

Rewrite(err);

AssignFile(exc, excfic);

Rewrite(exc);



(Memo2.Lines.LoadFromFile(lengfic));



//Copie des lignes contenant les erreurs dans les fichiers correspondants

For i := 0 to Memo2.Lines.Count do begin

if(Pos(error4, Memo2.Lines[i])>0) or

(Pos(error5, Memo2.Lines[i])>0) or

(Pos(error6, Memo2.Lines[i])>0) or

(Pos(error7, Memo2.Lines[i])>0) or

(Pos(error8, Memo2.Lines[i])>0) or

(Pos(error9, Memo2.Lines[i])>0) or

(Pos(error10, Memo2.Lines[i])>0) then

Memo3.Lines.Append(Memo2.Lines[i-1] + ' ' + Memo2.Lines[i]) else

Memo4.Lines.Append(Memo2.Lines[i])

end;



for i := 0 to Memo3.Lines.Count do begin

writeln(exc, Memo3.Lines[i]);

end;



for i := 0 to Memo4.Lines.Count do begin


if(Pos(impos, Memo4.Lines[i])>0) then


Memo5.Lines.Append(Memo4.Lines[i-1]+ ' ' + Memo4.Lines[i]);

end;



for i := 0 to Memo5.Lines.Count do begin

Writeln(err, Memo5.Lines[i]);

end;



CloseFile(fic);

CloseFile(fic2);

CloseFile(fic3);

CloseFile(exc);

CloseFile(err);



IdMessage := TIdMessage.Create(nil);

IdMessage.From.Address := melrep; //@ émetteur

IdMessage.ReplyTo.Add.Address := melrep; //@ de réponse et / ou destinataire

IdMessage.Recipients.Add.Address := mel;

IdMessage.Subject := melsuj; //Sujet du message

IdMessage.ContentType := 'text/plain'; // Message texte

IdMessage.Body := Memo5.Lines; //corps du message



//Envoi du message

IdSMTP := TIdSMTP.Create(nil);

melport2 := StrToInt(melport);

IdSMTP.Port := melport2; //port smtp

IdSMTP.Host := melserv; //serveur smtp



//Connexion et envoi du message

Try

IdSMTP.Connect;

IdSMTP.Send(IdMessage);

finally

IdSMTP.Disconnect;

IdSMTP.Free;

IdMessage.Free;

end;

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

close;

end;



end.





@+
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 janv. 2006 à 11:12
dans ton form.create tu n'as pas de test avant:



//Envoi du message

IdSMTP := TIdSMTP.Create(nil);

melport2 := StrToInt(melport);

IdSMTP.Port := melport2; //port smtp

IdSMTP.Host := melserv; //serveur smtp



//Connexion et envoi du message

Try

IdSMTP.Connect;

IdSMTP.Send(IdMessage);

finally

IdSMTP.Disconnect;

IdSMTP.Free;

IdMessage.Free;

end;

par conséquent tu envoies systématiquement un message

ensuite si tu mets

for i := 0 to Memo1.Lines.Count do begin

for i := 0 to Memo2.Lines.Count do begin

for i := 0 to Memo3.Lines.Count do begin

for i := 0 to Memo4.Lines.Count do begin

for i := 0 to Memo5.Lines.Count do begin



tu auras une erreur d'exécution (indice hors limites) count donnant le
nombre de lignes et commençant à l'indice 0 la dernière ligne est à
count-1

il faut donc écrire:

for i := 0 to MemoXX.Lines.Count -1 do begin



A mon avis tu n'as pas testé le code que tu nous donnes!!

@+

jlen
3
xt3 Messages postés 23 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 13 février 2006
26 janv. 2006 à 10:16
Voilà mon problème, je suis toujours avec les rapports d'erreur
d'arcserve et donc je ne souhaite envoyer l'email contenant les erreurs
que quand il y a des erreurs.

Le problème ici étant que le programme envoie des e-mail meme quand il n'y a pas d'erreur.

Voici un bout de mon script :



if Memo5.Lines.Count <> 0 then

Try

IdSMTP.Connect;

IdSMTP.Send(IdMessage);

finally

IdSMTP.Disconnect;

IdSMTP.Free;

IdMessage.Free;

end

end;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 janv. 2006 à 10:21
essaye çà:

if Memo5.Lines.Count <> 0 then

begin

Try

IdSMTP.Connect;

IdSMTP.Send(IdMessage);

finally

IdSMTP.Disconnect;

IdSMTP.Free;

IdMessage.Free;

end;

end;

@+

jlen
0
xt3 Messages postés 23 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 13 février 2006
26 janv. 2006 à 10:30
Salut jlen100, ton script marche mais le résultat est le même il envoie quand même des e-mail vide.

@+
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
26 janv. 2006 à 10:41
dans ce cas regardes dans ailleurs dans ton programme si tu n'as pas une instruction qui force l'envoi du mail.

attention aussi avant de de lancer la procedure de tri fait

Memo5.lines.free pour le vider.

pour vérifier que le test fonctionne

if Memo5.Lines.Count <> 0 then

begin

Try

IdSMTP.Connect;

IdSMTP.Send(IdMessage);

finally

IdSMTP.Disconnect;

IdSMTP.Free;

IdMessage.Free;

end;

end else MessageDlg('Pas de donnée à transmettre',mtError , [mbOk], 0);

@+

jlen
0
xt3 Messages postés 23 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 13 février 2006
26 janv. 2006 à 11:26
Ben si j'ai testé le code que je vous donne, le code marche parfaitement ( sauf qu'il envoie des e-mails même si ils sont vides ).

Delphi 6 me lance ce code et ne provoque aucune erreur, je reçois parfaitement les e-mails contenant les erreurs triés.

Sinon ben je vais tester ta méthode jlen, merci et @+
0
xt3 Messages postés 23 Date d'inscription mardi 10 janvier 2006 Statut Membre Dernière intervention 13 février 2006
26 janv. 2006 à 11:56
C'est bon ça marche, jlen, t'avais raison pour le MemoXX.Lines.Count -1, ça marche nikel maintenant.

Je te remercie 15000 fois jlen t'es trop balèze.

@++
0
Matt 261 Messages postés 1173 Date d'inscription mercredi 2 novembre 2005 Statut Membre Dernière intervention 10 septembre 2011 3
27 janv. 2006 à 18:21
Trops bien d'accepter tes réponses xt3... lol
Avec tous les logiciels de messagerie que j'ai téléchargé ici, il n'y en a pas en qui marche chez moi mais je vais essayer avec ton code xt3 on ne sait jamais...
@++++ et bonne prog
Matt
0
Rejoignez-nous