Newsgroup: it.comp.lang.delphi
Titolo: 'List index out of bounds (11350216).

mi da un erore bello grosso:
Project Project.exe raised exception clas EstringListError with message 
'List index out of bounds (11350216).
ecco il codice:
[code]var i:integer;
begin
//setup SMTP
   SMTP.Host := Server.Text;
   SMTP.Port := 25;
//Camuffare il programma
   SMTP.MailAgent := Agent.Text;
//setup mail message
   MailMessage.From.Address := Da.Text;
 
MailMessage.From.Name
 := Nome.Text;
   MailMessage.Recipients.EMailAddresses := A.Text;
   MailMessage.CCList.EMailAddresses := CC.Text;
   MailMessage.BccList.EMailAddresses :=
   Ccn.Text + ' ' + Lista.Items[i];
   MailMessage.Subject := Oggetto.Text;
   MailMessage.Body.Text := Messaggio.Text;
   if FileExists(Allegato.Text) then
   TIdAttachment.Create(MailMessage.MessageParts,
                          Allegato.Text);
//send mail
   try
   try
   SMTP.Connect(3000);
   SMTP.Send(MailMessage);
   except on E:Exception do
   Messaggio.Lines.Insert(0, 'ERROR: ' + E.Message);
   end;
   finally
   if SMTP.Connected then
      SMTP.Disconnect;
//Abilata Time per pregress bar
Timer1.Enabled:=true;
//progressbar
     progressbar1.Max:=1;
if  progressbar1.Position    <= 5  then
begin
     progressbar1.Position:= progressbar1.Position+1;
end else
     if progressbar1.Position >= 5 then
//disabilita Time per progress bar
Timer1.Enabled:=false;
Label11.Caption := ('Email Inviata');
//Resettta Progress Bar
Timer1.Enabled:=true;
Label11.Caption := ('Email Inviata');
Timer1.Enabled:=false;
end;
end;[/code]
La riga modificata per le mie necessita è questa
[code]MailMessage.BccList.EMailAddresses :=
   Ccn.Text + ' ' + Lista.Items[i];[/code]

   Ccn.Text + ' ' + Lista.Items[i];[/code]
L'errore "List index out of bounds" significa che stai cercando di 
ottenere un valore della lista che non esiste, in questo caso il valore 
con indice 11350216.
La variabile i non è inizializzata dunque "contiene" un valore a caso in 
questo caso proprio il numero 11350216, basta inizializzare la variabile 
I con il valore giusto, che sia entro i limiti della lista e non darà 
piu' l'errore, se per esempio vuoi che ti ritorni la riga selezionata in 
un oggetto TListBox il codice da usare è Lista.Items[Lista.ItemIndex], 
ossia vuol dire prendi l'oggetto con indice selezionato, ma attenzione 
che il problema è sempre dietro l'angolo ... infatti se non selezioni 
niente nella lista ti ritorna il fatidico errore List index out of 
bounds (-1) come noti questa volta c'e' un -1 tra parentesi in quanto il 
valore Lista.ItemIndex non selezionato vale -1, per risolvere il tutto 
basta testare la proprietà Itemindex dell'oggetto lista
if Lista.ItemIndex>-1 then
MailMessage.BccList.EMailAddresses := Ccn.Text + ' ' + 
Lista.Items[Lista.ItemIndex]
else
ShowMessage('selezionare pippo');
^_Goblin_^
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

^_Goblin_^ ha scritto:

if Lista.ItemIndex>-1 then
   MailMessage.Recipients.EMailAddresses :=
   A.Text + ' ' + Lista.Items[Lista.ItemIndex] else;
L'ho compilato cosi ma mi da questo errore:
ERROR: DATA Transaction failed, no recipients given
da quello che ho capito mi dice che non trova un contatto email in 
effetti ho notato che i contatti non sono selezionati nella lista box 
come faccio? devo modificare qualche preferenze per il componente lista 
o è una faccenda di istruzioni?

Camaleonte ha scritto:

ho fatto era nelle proprietà si chiama multiselect

Camaleonte ha scritto:

sebene adesso riesco a selezionarli tutti insieme non mi manda il 
messaggio, lo fa solo se selziono un contatto.