4
« en: Domingo 17 de Noviembre de 2013, 20:13 »
El siguiente código me funciona bien para una sola cuenta pero cuando hay más de una me da un error en blanco y no sé porqué:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (TreeView1->Items->Count == 0) {
ShowMessage("No hay ninguna cuenta establecida\n"
"pulsa sobre nueva cuenta para establecer una.");
}
else {
String host = "";
String userid = "";
String pasword = "";
int puerto = 0;
if (lis->Count == 1) {
for (int i = 0; i < lis->Count; i++) {
host = opti->ReadString(TreeView1->Items->Item[i]->Text,"host","");
userid = opti->ReadString(TreeView1->Items->Item[i]->Text,"userid","");
pasword = opti->ReadString(TreeView1->Items->Item[i]->Text,"pasword","");
puerto = opti->ReadInteger(TreeView1->Items->Item[i]->Text,"puerto",0);
if (correu->Connected()) {
correu->Disconnect();
}
if (!correu->Connected()) {
correu->Host = host;
correu->Username = userid;
correu->Password = pasword;
correu->Port = puerto;
if (opti->ReadBool(TreeView1->Items->Item[i]->Text,"conexionsegura",false)){
correu->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
}
else {
correu->IOHandler = NULL;
}
correu->Connect();
Application->ProcessMessages();
int num_mensajes = correu->CheckMessages();
if (num_mensajes==0){
Label12->Font->Color = clBlack;
Label12->Caption = "No hay mensajes en "+TreeView1->Items->Item[i]->Text+".";
Label12->Visible = true;
}
else {
//ShowMessage("Hay mensajes...");
Label1->Caption = IntToStr(num_mensajes);
for (int e=1;e<=num_mensajes;e++){
mensa->Clear();
correu->RetrieveHeader(e,mensa);
TListItem *ite;
ite = lista->Items->Add();
ite->Caption = IntToStr(e);
ite->SubItems->Add(mensa->From->Address);
ite->SubItems->Add(mensa->Subject);
ite->SubItems->Add(mensa->Date.DateString()+" - "+mensa->Date.TimeString());
ite->SubItems->Add(IntToStr((correu->RetrieveMsgSize(e)/1024)+1)+" kbs");
ite->ImageIndex = 1;
ite->SubItemImages[0] = 0;
Application->ProcessMessages(); //Esta línea es clave
SendMessage(lista->Handle,WM_VSCROLL,SB_LINEDOWN,0);
}
}
correu->Disconnect();
}
}
}
else{
//ShowMessage("has entrado en el else...");
for (int i = 0; i < lis->Count; i++) {
host = opti->ReadString(TreeView1->Items->Item[i]->Text,"host","");
userid = opti->ReadString(TreeView1->Items->Item[i]->Text,"userid","");
pasword = opti->ReadString(TreeView1->Items->Item[i]->Text,"pasword","");
puerto = opti->ReadInteger(TreeView1->Items->Item[i]->Text,"puerto",0);
if (correu->Connected()) {
correu->Disconnect();
}
if (!correu->Connected()) {
correu->Host = host;
correu->Username = userid;
correu->Password = pasword;
correu->Port = puerto;
if (opti->ReadBool(TreeView1->Items->Item[i]->Text,"conexionsegura",false)){
correu->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
}
else {
correu->IOHandler = NULL;
}
correu->Connect();
Application->ProcessMessages();
int num_mensajes = correu->CheckMessages();
if (num_mensajes==0){
Label12->Font->Color = clBlack;
Label12->Caption = "No hay mensajes en "+TreeView1->Items->Item[i]->Text+".";
Label12->Visible = true;
}
else {
//ShowMessage("Hay mensajes...");
Label1->Caption = IntToStr(num_mensajes);
for (int e=1;e<=num_mensajes;e++){
mensa->Clear();
correu->RetrieveHeader(e,mensa);
TListItem *ite;
ite = lista->Items->Add();
ite->Caption = IntToStr(e);
ite->SubItems->Add(mensa->From->Address);
ite->SubItems->Add(mensa->Subject);
ite->SubItems->Add(mensa->Date.DateString()+" - "+mensa->Date.TimeString());
ite->SubItems->Add(IntToStr((correu->RetrieveMsgSize(e)/1024)+1)+" kbs");
ite->ImageIndex = 1;
ite->SubItemImages[0] = 0;
Application->ProcessMessages(); //Esta línea es clave
SendMessage(lista->Handle,WM_VSCROLL,SB_LINEDOWN,0);
}
}
correu->Disconnect();
}
}
}
}
}
//---------------------------------------------------------------------------
Agradeceré cualquier posible solución. Muchas gracias.
Utilizo C++ XE5 bajo windows7 64 bits.