Test si un memo est vide

Résolu
Signaler
Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006
-
Messages postés
1173
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
10 septembre 2011
-
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

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

test la propriete count de lines du memo

tu fais:

if Memo1.lines.count=0 then memovide



@+

jlen
Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006

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.





@+
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
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
Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006

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;
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
essaye çà:

if Memo5.Lines.Count <> 0 then

begin

Try

IdSMTP.Connect;

IdSMTP.Send(IdMessage);

finally

IdSMTP.Disconnect;

IdSMTP.Free;

IdMessage.Free;

end;

end;

@+

jlen
Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006

Salut jlen100, ton script marche mais le résultat est le même il envoie quand même des e-mail vide.

@+
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
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
Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006

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 @+
Messages postés
23
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
13 février 2006

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.

@++
Messages postés
1173
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
10 septembre 2011
3
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