CppWebbrowser- Jak wyswietlic wiadomość w HTML

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

CppWebbrowser- Jak wyswietlic wiadomość w HTML

Nowy postprzez invert » sobota, 10 stycznia 2009, 17:39

Program juz mam.
Pobieram maile, wyświetlam mail w ListView w ktorym mam kolumny, Nadwaca, temat, Data, klikając na pobranego maila wyswietlam jego zawartosc o ile nie jest ona w HTML w o okienku MEMO, i teraz moje pytanie jest takie.
Jak zapisać daną wiadomość na dysku z rozszerzeniem EML, czy mam to zapisywać poprzez ListView czy tez przez Memo np z użyciem SaveDialog.
Drugie pytanie juz mniej ważne. Jak zrobić aby wiadomosc w html wyswietlała sie w MEMO?
Ostatnio edytowano środa, 14 stycznia 2009, 08:35 przez invert, łącznie edytowano 1 raz
Avatar użytkownika
invert
 
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez wargo » sobota, 10 stycznia 2009, 18:37

invert napisał(a):czy mam to zapisywać poprzez ListView czy tez przez Memo np z użyciem SaveDialog.

Savedialog wyświetla tylko okienko i zwraca odpowiednie parametry np. ścieżka. Możesz połączyć te dwie możliwości.

invert napisał(a):Jak zrobić aby wiadomosc w html wyswietlała sie w MEMO?

Nie ma takiej możliwości. W memo możesz mieć tylko czysty tekst.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez invert » sobota, 10 stycznia 2009, 19:01

wargo napisał(a):Savedialog wyświetla tylko okienko i zwraca odpowiednie parametry np. ścieżka. Możesz połączyć te dwie możliwości.


OK, jak sie wogole do tego zabrać. Niemam pojęcia jak to ruszyć.

wargo napisał(a):Nie ma takiej możliwości. W memo możesz mieć tylko czysty tekst.


W takimrazie za pomocą czego moge wyświetlać wiadomosci w HTML i TXT?
Avatar użytkownika
invert
 
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez Darek_C++ » sobota, 10 stycznia 2009, 23:39

Jeśli wiadomość, a właściwie sama część body wiadomości jest w formacie HTML możesz wyświetlić ją w komponencie typu TCppWebBrowser jesli chcesz uzyskać wygląd strony HTML.
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez Cyfrowy Baron » niedziela, 11 stycznia 2009, 09:57

Kolego! Jeżeli nie wiesz jak działa SaveDialog to chyba za wcześnie na taki program, najpierw powinieneś poznać podstawy.

Przykład użycia komponentu SaveDialog:
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if(SaveDialog1->Execute())
   {
    Memo1->Lines->SaveToFile(SaveDialog1->FileName);
   }
}




Co do formatu EML, to jest to format pliku Outlook'a, zawierający jakieś tam formatowanie. Żeby zapisać cokolwiek w tym formacie, trzeba najpierw rozpracować, czyli zapoznać się ze sposobem formatowania tegoż pliku i stworzyć algorytm zapisujący pliki w takimże formatowaniem. Nie znam tego modelu formatowanie i nie znam żadnej biblioteki, która by udostępniała takież formatowanie.
Możesz równie dobrze stworzyć własny format pliku zawierający takie formatowanie jakie sam wymyślisz i zapisywać wiadomości w tym formacie.
Nie jest tak, ze wszystkie programy pocztowe zapisują wiadomości z wykorzystaniem formatu Outlook'a, np. Thunderbird wykorzystuje własne, zupełnie inne formatowanie pliku.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez invert » niedziela, 11 stycznia 2009, 10:38

Darek_C++ napisał(a):Co do formatu EML, to jest to format pliku Outlook'a, zawierający jakieś tam formatowanie. Żeby zapisać cokolwiek w tym formacie, trzeba najpierw rozpracować, czyli zapoznać się ze sposobem formatowania tegoż pliku i stworzyć algorytm zapisujący pliki w takimże formatowaniem. Nie znam tego modelu formatowanie i nie znam żadnej biblioteki, która by udostępniała takież formatowanie.
Możesz równie dobrze stworzyć własny format pliku zawierający takie formatowanie jakie sam wymyślisz i zapisywać wiadomości w tym formacie.
Nie jest tak, ze wszystkie programy pocztowe zapisują wiadomości z wykorzystaniem formatu Outlook'a, np. Thunderbird wykorzystuje własne, zupełnie inne formatowanie pliku.


Dziekuje ci bardzo za odpowiedz. Mam jeszcze takie pytanie. Czy masz moze przykładowy algorytm zapisu maila do jakiegos formatu?
Wczoraj jeszcze udało mi sie zapisac do pliku zawartosc listView ale nawet jak zmienie rozszerzenie na eml to zaden prorgram pocztowy odczytuje plik jako pusty.
Ewentualnie, zapis całego maila czyli całe źródło, do pliku txt.
Avatar użytkownika
invert
 
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez Cyfrowy Baron » niedziela, 11 stycznia 2009, 12:47

Myliłem się. EML to tylko rozszerzenie, możesz zapisać wiadomość jako plik tekstowy lub z formatowaniem HTML nadając takiemu plikowi rozszeżenie EML i już będzie rozpoznawane przez programy.

Zapisanie zawartości Memo do pliku tekstowego podałem Tobie w poprzednim poście:

Kod: Zaznacz cały
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       if(SaveDialog1->Execute())
       {
        Memo1->Lines->SaveToFile(SaveDialog1->FileName);
       }
    }


Jednakże plik EML powinien zawierać przed treścią wiadomości informacje nagłówka, np:


X-Account-Key: account2
X-UIDL: 0006053f102812fb
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:
Received: from precyl.pl ([62.75.218.94]:57218 "EHLO server.precyl.pl"
rhost-flags-OK-FAIL-OK-OK) by ps17.test.onet.pl with ESMTPS
id S738199824AbZACUligYCkJ; Sat, 3 Jan 2009 21:41:38 +0100
Received: from [62.75.218.94] (helo=mail.precyl.pl)
by server.precyl.pl with esmtpa (Exim 4.69)
(envelope-from <admin@precyl.pl>)
id 1LJCyj-00088N-KN
for cyfrowy_baron@op.pl; Sat, 03 Jan 2009 21:20:13 +0100
Date: Sat, 03 Jan 2009 20:20:13 +0000
To: cyfrowy_baron@op.pl
From: "Precyl.pl" <Precyl.pl>
Message-ID: <20081228014207.33fae520a9aa@precyl.pl>
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-8859-2"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-Mailer: vBulletin Mail via PHP
Subject: =?ISO-8859-2?q?Tytuł wiadomości=
X-OnetAntySpam: NIE, to nie jest SPAM
X-OrigFrom: admin@precyl.pl
X-ZA0: unknown (-1,0)
Status:
Treść wiadomości..........................




Jeżeli nie dodasz nagłówka i zapisze tylko zawartość Memo do pliku i nadasz mu rozszerzenie EML to i tak zostanie on rozpoznany przez Outlooka jako wiadomość e-mail, jednak nie bzie zawierała takich informacji jak: Od Data Do Temat

Poczytaj działy: porady
   ListBox
   ListView
   TStringList
   TRichEdit & Memo
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez invert » niedziela, 11 stycznia 2009, 13:35

Zawartość wyswietlam w Memo o ile wiadomosc jest wyslana jako txt. I po zapisie w formacie eml jest bez problemu odczytywana przez program pocztowy

Udało mi się zapisać ListView do pliku txt, ale jak juz go przekształcę na eml to w programie pocztowy nic nie jest wyświetlane. Teraz jak pobrać ten nagłówek
Ostatnio edytowano środa, 14 stycznia 2009, 08:33 przez invert, łącznie edytowano 1 raz
Avatar użytkownika
invert
 
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez Cyfrowy Baron » niedziela, 11 stycznia 2009, 14:24

Udało mi się zapisać ListView do pliku txt, ale jak juz go przekształcę na eml to w programie pocztowy nic nie jest wyświetlane. Teraz jak pobrać ten nagłówek


Trzeba przepisać zawartość wiersza obiektu ListView do np. obiektu typu TStringList, potem dodać do tego jeszcze zawartość Memo i całość zawartą w TStringList zapisać do pliku:

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TStringList *tmp = new TStringList;
__int16 x = ListView1->ItemIndex;

  if(x < 0) return;

tmp->Add(ListView1->Items->Item[x]->Caption);
// dalsza częśc zależy od liczby kolumn w ListView1
tmp->Add(ListView1->Items->Item[x]->SubItems->Strings[0]);
tmp->Add(ListView1->Items->Item[x]->SubItems->Strings[1]);
// wstawienie pustej lini
tmp->Add("");
// dodawanie zawartości obiektu Memo1
tmp->Add(Memo1->Lines->Text);

if(SaveDialog1->Execute())
{
  tmp->SaveToFile(SaveDialog1->FileName);
}
delete tmp;
}
//---------------------------------------------------------------------------




Nie rozumiem jak możesz tworzyć program pocztowy mając tak niewielką wiedzę o programowaniu. Chyba powinieneś najpierw poćwiczyć.
Co co tutaj wyjaśniam, to są podstawy.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4719
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Jak zapisać wiadomość + indy

Nowy postprzez invert » niedziela, 11 stycznia 2009, 14:50

Dziekuję za pomoc, program juz skonczyłem, zostało mi tylko wyświetlenie wiadomości wysłanej w html przez komponent CppWebbrowser.
W jednym z twoich porad zauwazylem taki kod:
CppWebBrowser->Navigate(WideString("about:blank")); // wypełnienie kontrolki pustą stroną.
TMemoryStream *stm = new TMemoryStream();
Memo1->Lines->SaveToStream(stm);

IPersistStreamInit *psi;
stm->Seek(0, 0);

TStreamAdapter *sa = new TStreamAdapter(stm, soReference);

if(SUCCEEDED(CppWebBrowser->Document->QueryInterface(IID_IPersistStreamInit, (void **)&psi)))
psi->Load(*sa);

delete stm;


zaadoptowałem go do programu. Wyświetla wiadomość z Memo, ale nie tak jak powinien mianowicie.
Gdy zaznaczę wiadomość i nacisnę Button "Wyświetl" to wyświetli elegancko wiadomość w HTML, natomiast gdy chce zobaczyć druga wiadomość to juz nie zostaje ona wyświetlona, cały czas jest pusta strona w CppWebbrowser.
Avatar użytkownika
invert
 
    NieznanyNieznana


  • 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