CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - CppWebBrowser1 - problem z ponownym wyświetleniem zawartości

CppWebBrowser1 - problem z ponownym wyświetleniem zawartości

problemy z funkcjonowaniem bibliotek, komponentów itp.

CppWebBrowser1 - problem z ponownym wyświetleniem zawartości

Nowy postprzez LiMeS » niedziela, 21 października 2012, 12:47

Witam.

Mam taki problem - w TMemo mam wprowadzony kod HTML. Za pomocą CppWebBrowser wyświetlam zawartość tego kodu HTML. Problem pojawia się w tym momencie, kiedy klikam ponownie na przycisk wywołujący poniższą funkcję.
Pojawia się biały ekran i... nic więcej. Gdzie jest popełniony błąd ?

KOD cpp:     UKRYJ  
void __fastcall TOkno_glowne::Button1Click(TObject *Sender)
{
CppWebBrowser1->Navigate(WideString("about :blank")); // wypełnienie kontrolki pustą stroną.
 TMemoryStream *stm = new TMemoryStream();
 Memo8->Lines->SaveToStream(stm);

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

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

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

 delete stm;
}
//---------------------------------------------------------------------------
 
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: CppWebBrowser1 - problem z ponownym wyświetleniem zawartości

Nowy postprzez Cyfrowy Baron » niedziela, 21 października 2012, 13:20

Wypełnij kontrolkę pustą stroną tylko na starcie programu. Nie musisz jej wypełniać ponownie przy zmianie zawartości. Poza tym usuwasz obiekt stm, ale obiektu sa nie usuwasz, a przecież po wypełnieniu kontrolki nie jest już potrzebny.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
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
    Windows XPFirefox

Re: CppWebBrowser1 - problem z ponownym wyświetleniem zawartości

Nowy postprzez Cyfrowy Baron » niedziela, 21 października 2012, 16:25

Przeprowadziłem testy i winne jest oczywiście to, że wielokrotnie wywołujesz pustą stronę przed wczytaniem zasobów ("about:blanc"). Możesz oczywiście robić to tak jak robiłeś, ale przed załadowaniem strony z zasobów - tutaj z pamięci - musisz zatrzymać ładowanie, czyli po wczytaniu pustej strony musisz wywołać funkcję Stop():

KOD cpp:     UKRYJ  
 WebBrowser1->Navigate( L"about :blank" );
 WebBrowser1->Stop();
 TMemoryStream *stm = new TMemoryStream();
...




Przy okazji podam jeszcze kod na ładowanie strony z zasobów - tutaj z pamięci - dla środowiska XE2, gdyż kontrolka uległa nieznacznej zmianie i robi się to nieco inaczej. Poza tym ten sposób powinien też zadziałać w starszych wersjach.

KOD cpp:     UKRYJ  
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  WebBrowser1->Navigate( L"about :blank" ); // wypełnienie kontrolki pustą stroną.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TMemoryStream *stm = new TMemoryStream();
 Memo1->Lines->SaveToStream(stm);

 IPersistStreamInit *psi;
 WebBrowser1->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi);

 stm->Seek(0, 0);

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

 if(SUCCEEDED(WebBrowser1->Document->QueryInterface(IID_IPersistStreamInit, (void **)&psi)))
 {
  if( SUCCEEDED( psi->InitNew() ) )
  {
   psi->Load(sa);
  }

  psi->Release();
 }

 delete stm;
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
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
    Windows XPFirefox

Re: CppWebBrowser1 - problem z ponownym wyświetleniem zawartości

Nowy postprzez LiMeS » poniedziałek, 29 października 2012, 13:09

No - nareszcie mam chwilkę czasu :/

Serdecznie dziękuję za odpowiedź.
Rzeczywiście ładowanie pustej strony jest zdecydowanie niepotrzebne.
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przegląda forum

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

cron