Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 26.08.03 14:52
Оценка:
Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?

26.08.03 19:13: Перенесено модератором из 'C/C++' — ПК
Re: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: WoldemaR Россия  
Дата: 26.08.03 15:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


Попробуй воспользоваться этими функциями:
HRESULT IWebBrowser2::get_HWND(long *pHWND);

BOOL SetWindowText(
  HWND hWnd,         // handle to window or control
  LPCTSTR lpString   // title or text
);

А вообще-то это оффтопик.В WIN API или в COM/DCOM/ActiveX надобно.
Re: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: ilnar Россия  
Дата: 26.08.03 15:27
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


работай как вебсервер, передавай по порту 80.
но учти, что он все равно кешировать в файл будет
Re: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Nikto Россия  
Дата: 27.08.03 03:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


Из памяти — это на сколько я понимаю из строки?
Тогда примерно так можно:
1.) Снавигировать броузер на about:balnk.
2.) В DocumentComplete сделать что-то вроде :
IHTMLDocumentPtr doc;
//где-то здесь его получаем

doc->write(str);//str - строка содержащая HTML
Re[2]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 27.08.03 06:04
Оценка:
Здравствуйте, Nikto, Вы писали:

N>Здравствуйте, Аноним, Вы писали:


А>>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


N>Из памяти — это на сколько я понимаю из строки?

N>Тогда примерно так можно:
N>1.) Снавигировать броузер на about:balnk.
N>2.) В DocumentComplete сделать что-то вроде :
N>
N>IHTMLDocumentPtr doc;
N>//где-то здесь его получаем

doc->>write(str);//str - строка содержащая HTML
N>

А нельзя ли по подробнее?
Спасибо
Re[3]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Nikto Россия  
Дата: 27.08.03 06:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Nikto, Вы писали:


N>>Здравствуйте, Аноним, Вы писали:


А>>>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


N>>Из памяти — это на сколько я понимаю из строки?

N>>Тогда примерно так можно:
N>>1.) Снавигировать броузер на about:balnk.
N>>2.) В DocumentComplete сделать что-то вроде :
N>>
N>>IHTMLDocumentPtr doc;
N>>//где-то здесь его получаем

doc->>>write(str);//str - строка содержащая HTML
N>>

А>А нельзя ли по подробнее?
А>Спасибо

Задавай более конкретные вопросы, с примерами кода... Я ведь не телепат
Re: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Tom Россия http://www.RSDN.ru
Дата: 27.08.03 06:59
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


Нууу. Можно скажем свой pluggable protocol написать. Для твоей задачи очень даже просто получиться.
... << RSDN@Home 1.1 beta 1 >>
Народная мудрось
всем все никому ничего(с).
Re: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Max_Akimov Россия  
Дата: 27.08.03 07:49
Оценка: 5 (1)
Здравствуйте, Аноним, Вы писали:

А>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


Loading HTML content from a Stream
Re[4]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 27.08.03 07:50
Оценка:
N>Задавай более конкретные вопросы, с примерами кода... Я ведь не телепат
OK. Вот я пишу такой код
HRESULT hr;
// Навигируем в бланк и запрашиваем интерфейсы, m_browser - тот самы активХ, пропущеный через МФЦ :)
m_browser.Navigate( "about:blank", NULL, NULL, NULL, NULL );
IDispatch*         pDisp = (IDispatch*)m_browser.GetDocument();
IHTMLDocument2*    pDoc;
ASSERT( pDisp );
hr = pDisp->QueryInterface( UUID(IID_IHTMLDocument2), (void**)&pDoc );
ASSERT( pDoc );

SAFEARRAY        safe;
SAFEARRAYBOUND        sbound;
sbound.cElements    =    nRealSize;// Размер моего ХТМЛ
sbound.lLbound        =    0;
safe.cbElements        =    nRealSize;
safe.cDims        =    0;
safe.cLocks        =    0;
safe.fFeatures        =    FADF_AUTO;
safe.rgsabound[0]    =    sbound;
safe.pvData        =    mas;// здесь находится сам ХТМЛ, считаный из файла, который нормально просматривается

hr = pDoc->write( &safe );// возвращает S_OK, но WebBrowser как был пустой так и остался

И что делать не понятно
Re[5]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Nikto Россия  
Дата: 27.08.03 07:54
Оценка:
Здравствуйте, Аноним, Вы писали:

N>>Задавай более конкретные вопросы, с примерами кода... Я ведь не телепат

А>OK. Вот я пишу такой код
А>
А>HRESULT hr;
А>// Навигируем в бланк и запрашиваем интерфейсы, m_browser - тот самы активХ, пропущеный через МФЦ :)
А>m_browser.Navigate( "about:blank", NULL, NULL, NULL, NULL );
А>IDispatch*         pDisp = (IDispatch*)m_browser.GetDocument();
А>IHTMLDocument2*    pDoc;
А>ASSERT( pDisp );
А>hr = pDisp->QueryInterface( UUID(IID_IHTMLDocument2), (void**)&pDoc );
А>ASSERT( pDoc );

А>SAFEARRAY        safe;
А>SAFEARRAYBOUND        sbound;
А>sbound.cElements    =    nRealSize;// Размер моего ХТМЛ
А>sbound.lLbound        =    0;
А>safe.cbElements        =    nRealSize;
А>safe.cDims        =    0;
А>safe.cLocks        =    0;
А>safe.fFeatures        =    FADF_AUTO;
А>safe.rgsabound[0]    =    sbound;
А>safe.pvData        =    mas;// здесь находится сам ХТМЛ, считаный из файла, который нормально просматривается

А>hr = pDoc->write( &safe );// возвращает S_OK, но WebBrowser как был пустой так и осталсяА>

А>И что делать не понятно

Выделенный блок надо выполнять в событии DocumentComplete или после него...
Re[2]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 27.08.03 09:26
Оценка:
Здравствуйте, Max_Akimov, Вы писали:

M_A>Здравствуйте, Аноним, Вы писали:


А>>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


M_A>Loading HTML content from a Stream


Взял я кусок мелкософтового кода. Теперь мне не понятно, как мне из обертки CWebBrowser2 получить интерфейс IWebBrowser2. Я сделал так
m_pBrowser = (IWebBrowser2*)m_browser.GetApplication();

Но теперь он у меня зацикливается и когда я выхожу из DocumentComplete, он снова вызывается. В общем Windows Must Die какой-то!
Плюс еще GlobalFree( hHTMLText ); вылетает, пришлось его закоментировать.
Re[2]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 27.08.03 09:45
Оценка:
Здравствуйте, Max_Akimov, Вы писали:

M_A>Здравствуйте, Аноним, Вы писали:


А>>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


M_A>Loading HTML content from a Stream


И еще одна проблема. Почему-то он воспринимает HTML как текст, т.е. выводит тэги как текст. Странно...
Re[6]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 27.08.03 09:50
Оценка:
Здравствуйте, Nikto, Вы писали:

N>Здравствуйте, Аноним, Вы писали:


N>>>Задавай более конкретные вопросы, с примерами кода... Я ведь не телепат

А>>OK. Вот я пишу такой код
А>>
А>>HRESULT hr;
А>>// Навигируем в бланк и запрашиваем интерфейсы, m_browser - тот самы активХ, пропущеный через МФЦ :)
А>>m_browser.Navigate( "about:blank", NULL, NULL, NULL, NULL );
А>>IDispatch*         pDisp = (IDispatch*)m_browser.GetDocument();
А>>IHTMLDocument2*    pDoc;
А>>ASSERT( pDisp );
А>>hr = pDisp->QueryInterface( UUID(IID_IHTMLDocument2), (void**)&pDoc );
А>>ASSERT( pDoc );

А>>SAFEARRAY        safe;
А>>SAFEARRAYBOUND        sbound;
А>>sbound.cElements    =    nRealSize;// Размер моего ХТМЛ
А>>sbound.lLbound        =    0;
А>>safe.cbElements        =    nRealSize;
А>>safe.cDims        =    0;
А>>safe.cLocks        =    0;
А>>safe.fFeatures        =    FADF_AUTO;
А>>safe.rgsabound[0]    =    sbound;
А>>safe.pvData        =    mas;// здесь находится сам ХТМЛ, считаный из файла, который нормально просматривается

А>>hr = pDoc->write( &safe );// возвращает S_OK, но WebBrowser как был пустой так и осталсяА>

А>>И что делать не понятно

N>Выделенный блок надо выполнять в событии DocumentComplete или после него...


Не помогает
Re[7]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Nikto Россия  
Дата: 27.08.03 09:53
Оценка:
Здравствуйте, Аноним, Вы писали:


N>>Выделенный блок надо выполнять в событии DocumentComplete или после него...


А>Не помогает


Что значит не помогает? В чем конкретно проблема?
Re[8]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 27.08.03 10:12
Оценка:
Здравствуйте, Nikto, Вы писали:

N>Здравствуйте, Аноним, Вы писали:



N>>>Выделенный блок надо выполнять в событии DocumentComplete или после него...


А>>Не помогает


N>Что значит не помогает? В чем конкретно проблема?

Проблема в том, что окно браузера остается пустым.
Там дальше по дискуссии меня отослали к статье мелкософта, но при том подходе браузер мой ХТМЛ отображает как текст
Re[3]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Max_Akimov Россия  
Дата: 27.08.03 14:38
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Взял я кусок мелкософтового кода. Теперь мне не понятно, как мне из обертки CWebBrowser2 получить интерфейс IWebBrowser2. Я сделал так

А>
А>m_pBrowser = (IWebBrowser2*)m_browser.GetApplication();
А>

А>Но теперь он у меня зацикливается и когда я выхожу из DocumentComplete, он снова вызывается. В общем Windows Must Die какой-то!
А>Плюс еще GlobalFree( hHTMLText ); вылетает, пришлось его закоментировать.


DocumentComplete вызывается по окончанию загрузки документа. Т.е. последовательность действий примерно следующая
Делаем Navigate(About:blank) -> DocumentComplete -> в нем загружаем свой документ из стрима -> после его загрузки опять DocumentComplete. -> и т.д.

После успешной загрузки нужно выставить флаг, и больше документ не грузить.
Re[4]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Аноним  
Дата: 27.08.03 14:58
Оценка:
Здравствуйте, Max_Akimov, Вы писали:

M_A>Здравствуйте, Аноним, Вы писали:



А>>Взял я кусок мелкософтового кода. Теперь мне не понятно, как мне из обертки CWebBrowser2 получить интерфейс IWebBrowser2. Я сделал так

А>>
А>>m_pBrowser = (IWebBrowser2*)m_browser.GetApplication();
А>>

А>>Но теперь он у меня зацикливается и когда я выхожу из DocumentComplete, он снова вызывается. В общем Windows Must Die какой-то!
А>>Плюс еще GlobalFree( hHTMLText ); вылетает, пришлось его закоментировать.


M_A>DocumentComplete вызывается по окончанию загрузки документа. Т.е. последовательность действий примерно следующая

M_A>Делаем Navigate(About:blank) -> DocumentComplete -> в нем загружаем свой документ из стрима -> после его загрузки опять DocumentComplete. -> и т.д.

M_A>После успешной загрузки нужно выставить флаг, и больше документ не грузить.


А что за флаг, если не секрет? А то я сейчас в ручную такой флаг сделал? Есть ли автоматизация флагопостановки?
Re: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Saddam Россия http://saddam.narod.ru
Дата: 08.09.03 08:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


В BCB Это выглядит так:

   TMemoryStream *stm = new TMemoryStream();
   ((TBlobField *)DM->MesHtm->FieldByName("CONTAINMENT"))->SaveToStream(stm); //Поток - источник HTML
   IPersistStreamInit *psi;
   stm->Seek(0,0);
   TStreamAdapter *sa = new TStreamAdapter(stm,soReference);
   if (SUCCEEDED(NewMessage->WB->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))
    {
     psi->Load(*sa);//Собственно, загружаем из потока.
    }

В VC, скорее всего, аналогично.
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
Re: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: mik1  
Дата: 08.09.03 08:40
Оценка:
А>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?

Иногда не мешает читать матчасть (MSDN Magazine, собственно — за август 2003).
Вот где по этому поводу выссказывается классик:
http://msdn.microsoft.com/msdnmag/issues/03/08/CQA/
Re[2]: Microsoft Web Browser - вывод ХТМЛ из памяти ????
От: Saddam Россия http://saddam.narod.ru
Дата: 08.09.03 09:02
Оценка:
Здравствуйте, mik1, Вы писали:

А>>Собственно вопрос: как вывести ХТМЛ, который лежит не в файле, а в памяти. В файл сохранять нельзя, а из памяти Navigate не работает. Что делать?


M>Иногда не мешает читать матчасть (MSDN Magazine, собственно — за август 2003).

M>Вот где по этому поводу выссказывается классик:
M>http://msdn.microsoft.com/msdnmag/issues/03/08/CQA/
Проблема в том, что Outlook-овские HTML-сообщения не отображаются таким образом. Получилось только через Memory Stream. Собственно, интерфейс для этого так и предназначен, я так понимаю. )
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.