Klient poczty :)

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Klient poczty :)

Nowy postprzez wazniak » środa, 31 marca 2010, 00:11

Witam

Przejde do sedna

Mam komponent: CheckListBox1 i tam wczytuje swoje pliki(zalaczniki) ktore chce wysylac na e-mail, ale jak zrobic, ze tylko zaznaczone beda wyslane ?
Obrazek

Kod dla przycisku Dodaj
Kod: Zaznacz cały
if(OpenDialog1->Execute())
{
CheckListBox1->Items->Add(ExtractFileName(OpenDialog1->FileName));
}


Jak widac, narazie to tylko dodaje plik do listy w komponencie CheckListBox1 i jak wczesniej pisalem, chce wyslac tylko pliki ktore sa zaznaczone, bo np przez pomylke dodalem jakis zbedny plik, wiec jesli ktos moglby podac kod dla przycisku WYSLIJ bylbym wdzieczny :)

Mam tez inne pytanie

Mam np obiekt Label1 i teraz chce zrobic tak, ze jak klikne na niego to jego Caption zmieni sie np na "Wiecej opcji" a jak znow klikne to zmieni sie na "Mniej opcji", tak kombinowalem cos takiego napisac
Kod: Zaznacz cały
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(Label1->OnClick())
{
Label1->Caption = "Wiecej opcji";
}
else
{
Label1->Caption = "Mniej opcji";
}
}

Takie rozwiazanie nie dziala :) wiec testowalem w zdarzeniu OnClick obiektu Label1
Kod: Zaznacz cały
void __fastcall TForm1::Label1Click(TObject *Sender)
{
Label1->Caption = "Wiecej opcji";
}


ale w tym wypadku nie mam pomyslu jak tu zrobic to else

swoją drogą. jestem poczatkujacy w C++
Avatar użytkownika
wazniak
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): wtorek, 30 marca 2010, 18:24
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPOpera

Re: Klient poczty :)

Nowy postprzez Cyfrowy Baron » środa, 31 marca 2010, 09:20

Żeby sprawdzić, który element listy obiektu CheckListBox1 jest zaznaczony możesz posłużyć się jego funkcją Checked[X] gdzie X oznacza numer elementu, np:

Kod: Zaznacz cały

 for
(int i = 0; i < CheckListBox1->Items->Count; ++i)
 {
    if(CheckListBox1->Checked[i])
    {
     Memo1->Lines->Add(CheckListBox1->Items->Strings[i]);
    } 
 
}
 


Lista tylko zaznaczonych pozycji zostanie przepisana do Memo1. Posłużyłem się obiektem TMemo gdyż nie wiem jaki stosujesz mechanizm wysłania wiadomości. To tylko przykład pokazujący jak można pobrać zaznaczone elementy z listy CheckListBox.



wazniak napisał(a):
Kod: Zaznacz cały
if(OpenDialog1->Execute())
{
CheckListBox1->Items->Add(ExtractFileName(OpenDialog1->FileName));
}


Dodajesz do listy tylko nazwy plików załączników, ale tak to nie uda się Tobie ich wysłać, gdyż przy wysyłaniu niezależnie jaki mechanizm zastosujesz musisz podać pełną ścieżkę dostępu do pliku, który chcesz wysłać, a nie tylko nazwę tego pliku.



wazniak napisał(a):Mam np obiekt Label1 i teraz chce zrobic tak, ze jak klikne na niego to jego Caption zmieni sie np na "Wiecej opcji" a jak znow klikne to zmieni sie na "Mniej opcji",


Przecież to proste i oczywiste. Zdarzenie OnClick obiektu Label1:

Kod: Zaznacz cały

void __fastcall TForm1
::Label1Click(TObject *Sender)
{
 if(Label1->Caption != "Mniej opcji") Label1->Caption = "Mniej opcji";
 else Label1->Caption = "Więcej opcji";
}
 




wazniak napisał(a):
Kod: Zaznacz cały
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(Label1->OnClick())
{
Label1->Caption = "Wiecej opcji";
}
else
{
Label1->Caption = "Mniej opcji";
}
}



Przecież zdarzenie OnCreate formularza jest wywoływane tylko raz podczas tworzenia formularza, więc jak mogło to zadziałać. Poza tym zdarzenie OnClick jest wywoływane tylko po kliknięciu myszką na obiekt, więc nie można sprawdzić jego stanu, gdyż ono nie ma stanu prawda-fałsz, dlatego nie da się go zastosować w instrukcji warunkowej. Przemyśl to, gdyż najwyraźniej nie rozumiesz kodu który tworzysz.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
wazniak
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Klient poczty :)

Nowy postprzez wazniak » środa, 31 marca 2010, 11:11

Dzieki, za porady, postaram sie je jakos wklepac do programu :)

Co do mechanizmu wysylania to posluzylem sie Twoim przykladem siec6 Cyfrowy Baron

I teraz tak, jak widzisz na screenie, chce aby przycisk Dodaj dodał plik do listy w obiekcie CheckListBox1 a nastepnie zeby program wyslal pliki ktore sa zaznaczone, bo np przez pomylke dodalem o pare plikow za duzo(pozniej zamierzem zrobic opcje, zeby usunac zbedne pliki :D). Wybralem CheckListBox1 poniewaz wydal mi sie on dobry w tym wypadku, ale moze porponujesz jakis inny? Generalne zalozanie programu to cos jak Gmail Drive, chce z poczty o2 zrobic sobie taki internetowy dysk, moj program bedzie wysylal pliki w zalacznikach (np juz wczesniej spakowane po 100mb part)

EDIT

Tak pomyslalem i chyba jednak lepszy bedzie TListBox

Obrazek

Kod dla przycisku dodaj

Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
  ListBox1->Items->Add(ExtractFileName(OpenDialog1->FileName));
}
}


Na chwile obecna wyswietlane sa wlasnie tylko nazwy plikow, a jak to w kodzie zapisac, zeby wyslac (przy pomocy indy) pliki ktore widnieja na liscie w ListBox?

Mam kod dla przycisku wyslij

Kod: Zaznacz cały
void __fastcall TForm1::Button3Click(TObject *Sender)
{
try
{
  IdSMTP1->Send(IdMessage1);
}
__finally
{
  label->Caption = "Plik zostal wyslany";
}
}


ale nie wiem zbytnio jak dopisac tam kod ktory zalacza zalczniki z ListBox'a
Avatar użytkownika
wazniak
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): wtorek, 30 marca 2010, 18:24
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows XPOpera

Re: Klient poczty :)

Nowy postprzez Cyfrowy Baron » środa, 31 marca 2010, 13:08

Na chwile obecna wyswietlane sa wlasnie tylko nazwy plikow


Jak już wspomniałem nazwy plików nie wystarczą musisz przechowywać całe ścieżki dostępu do plików.



a jak to w kodzie zapisac, zeby wyslac (przy pomocy indy) pliki ktore widnieja na liscie w ListBox?


Jak wysłać jeden załącznik to już na pewno wiesz z serwisu Cyfrowy Baron. CO do wysyłania wielu plików to sam dokładnie nie wiem, muszę zagłębić się w dokumentację INDY. Z tego co zauważyłem to funkcja MessageParts posiada funkcję Items i pewnie coś z tym trzeba zrobić. Sprawdzę w wolnej chwili.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
wazniak
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Klient poczty :)

Nowy postprzez Cyfrowy Baron » środa, 31 marca 2010, 18:11

Wysyłanie e-maila z wieloma załącznikami.

Przykład bazuje na bibliotekach INDY w wersji 10.5.5

Kod: Zaznacz cały

 IdMessage1
->From->Name = "Cyfbar"; //pobiera nazwę nadawcy wiadomości
 IdMessage1->From->Address = "cyfrowy_baron@op.pl"; //pobiera adres e-mail nadawcy wiadomości
 IdMessage1->Recipients->EMailAddresses = "cyfrowy.baron@op.pl"; // pobiera adres e-mail odbiorcy wiadomości
 IdMessage1->Subject = "Tytuł wiadomości"; // pobiera tytuł (temat) wiadomości
 IdMessage1->Body->Append(Memo1->Text); //pobiera treść wiadomości

 IdSMTP1->Host = "smtp.poczta.onet.pl"; // pobiera adres serwera SMTP
 IdSMTP1->Password = "hasło"; // pobiera hasło nadawcy wiadomości
 IdSMTP1->Username = "cyfrowy_baron@op.pl"; // pobiera nazwę nadawcy wiadomości - ID użytkownika
 IdSMTP1->Port = 587;
 IdSMTP1->AuthType = satDefault;
 IdSMTP1->UseTLS = utNoTLSSupport;

 for(int i = 0; i < ListBox1->Items->Count; ++i)
 {
  IdMessage1->MessageParts->Add();
  new TIdAttachmentFile(IdMessage1->MessageParts, ListBox1->Items->Strings[i]);
 }


 IdSMTP1->Connect();

 try
 
{
  IdSMTP1->Send(IdMessage1);
 }
 __finally
 
{
  IdSMTP1->Disconnect();
 }

 IdMessage1->MessageParts->Clear();
 
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron