Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« : 07-04-2004 09:06 » |
|
Сосбтвенно - найти пока не смог - есть советы создавать собственный ISAPI но шизеть не охота - наверняка есть возможности загружать не файлы и линки - а обычный свой буфер!!!!
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #1 : 07-04-2004 19:38 » |
|
А что никто не знает???
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Serega
Гость
|
|
« Ответ #2 : 07-04-2004 19:39 » |
|
Файл это тот же буфер, только на винте
|
|
|
Записан
|
|
|
|
Chaa
|
|
« Ответ #3 : 08-04-2004 03:51 » |
|
В MSDN есть статья Loading HTML content from a Stream. Общая идея: 1. Navigating to about:blank 2. Using QueryInterface to Obtain the IPersistStreamInit Interface 3. Using the IPersistStreamInit Interface to Load HTML Content HRESULT LoadWebBrowserFromStream(IWebBrowser* pWebBrowser, IStream* pStream) { HRESULT hr; IDispatch* pHtmlDoc = NULL; IPersistStreamInit* pPersistStreamInit = NULL;
// Retrieve the document object. hr = pWebBrowser->get_Document( &pHtmlDoc ); if ( SUCCEEDED(hr) ) { // Query for IPersistStreamInit. hr = pHtmlDoc->QueryInterface( IID_IPersistStreamInit, (void**)&pPersistStreamInit ); if ( SUCCEEDED(hr) ) { // Initialize the document. hr = pPersistStreamInit->InitNew(); if ( SUCCEEDED(hr) ) { // Load the contents of the stream. hr = pPersistStreamInit->Load( pStream ); } pPersistStreamInit->Release(); } } }
|
|
« Последнее редактирование: 25-11-2007 16:28 от Алексей1153++ »
|
Записан
|
|
|
|
Chaa
|
|
« Ответ #4 : 08-04-2004 03:53 » |
|
Ссылка на локальный MSDN: ms-help://MS.VSCC/MS.MSDNVS/ProgIE/workshop/browser/webbrowser/tutorials/WebOCStream.htm
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #5 : 08-04-2004 05:38 » |
|
Serega, нет в том то и дело! Физически - данные не меняются - это и пнб понятно - виртуальный файл - знакомо мне это - проблема в другом!!! Нет у View объекта - метода загрузки динамического буфера! А есть загрузка с ссылки на Web или с файла по имени!
Т.е. нельзя взять данные из БД - которые сам понимаешь не просто файл - потом засунуть их в буфер - положить сверху форматирующую обертку из HTML кода и вывести этот динамический буфер без записи в файл на экран - например как в MSDN! Вот Chaa вроде подсказал похожее - буду пробовать днем - отпишу что и как!
Chaa, спасибо - в этой области винды я не очень работал - только со стандартными объектами типа CTreeView!
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
SOS
Гость
|
|
« Ответ #6 : 19-04-2004 14:45 » |
|
Гром
У меня были подобные проблемы. Решил их использованием DHTML Edit Control от Microsoft. Это тот, что во FrontPage стоит. Project->Add to Project->Registered ActivX Controls
У него, так же намного больше возможностей, чем у CHtmlView
|
|
|
Записан
|
|
|
|
kisilevski
|
|
« Ответ #7 : 27-04-2004 08:21 » |
|
Может быть и поздно пишу, но всё-таки: Задачка динамического формирования контента CHTMLView и CDHTMLDialog решается следующим образом: 1. Создаём файл-заготовку HTML, в которой назначаем ID для тэга, который хотим заменить на <содержимое буфера>, например: <HTML> <BODY> <p id="idContent">Content</p> </BODY> </HTML>
пихаем его в ресурс и загружаем его как Initial content для IE, встроенного в диалог или вид. 2. В нужный нам момент времени (например, юзер что-то нажал, или диалог загрузился, или View обновился) получаем указатель на тэг по его ID: // Пример для диалога void CDlg_Node::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl) { CDHtmlDialog::OnDocumentComplete(pDisp, szUrl); // это надо вызывать CComPtr<IHTMLElement> pHE_Cnt=NULL; GetElementInterface(_T("idContent"), IID_IHTMLElement, (void **) &pHE_Cnt); if(!pHE_Cnt) return;
BSTR bstrHE = NULL; // Эту строку потом закинем
CString Str; // Сформируем новую строчку: Str = "<p id=\"idContent\">Новый текст параграфа</p>"; bstrHE = Str.AllocSysString();
pHE_Cnt->put_outerHTML(bstrHE); // Собственно закидывание нового контента SysFreeString(bstrHE); // Смоем за собой
}
Пример для View несколько более громоздкий, но там это тоже возможно. вот и всё. Ежели надо - пример кину почтой.
|
|
« Последнее редактирование: 25-11-2007 16:30 от Алексей1153++ »
|
Записан
|
Ложки нет. See MSDN for details.
|
|
|
mixa
Гость
|
|
« Ответ #8 : 30-04-2004 15:54 » |
|
Вот же бля%%кая система. Что у них руки поотсыхали сделать по нормальному ? Насколько бы легче можно было бы морды делать !!!! Загнал HTML и порядок. Хотя, хотя если можно закинуть в HTML любой тег через put_outerHTML, это уже что-то
|
|
|
Записан
|
|
|
|
dachny
Гость
|
|
« Ответ #9 : 04-03-2005 10:55 » |
|
Да че вы гоните дети а ето
Navigate2( LPCTSTR lpszURL, DWORD dwFlags, CByteArray& baPostedData, LPCTSTR lpszTargetFrameName = NULL, LPCTSTR lpszHeader = NULL );
а ето
void Navigate( LPCTSTR URL, DWORD dwFlags = 0, LPCTSTR lpszTargetFrameName = NULL, LPCTSTR lpszHeaders = NULL, LPVOID lpvPostData = NULL, DWORD dwPostDataLen = 0 ); Parameters
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #10 : 04-03-2005 11:21 » |
|
Саше Дачному. Последнее предупреждение от детей. Еще одно сообщение в таком тоне, будешь рассказывать о своей крутости на RSDN.
По поводу фунции Navigate - вопрос к взрослому - укажи какой параметр принимает не имена файла или URL на удаленном сервере, а обычный текстовый буфер...
Скажем в вышеуцпомянутой задачи HTML страница формируется ODBC запросом данных из Акцесса, а потом данные ззаворачиваются программно в HTML и файла не существует и URL тоже - только блок данных в памяти - в какой параметр функции Navigate или Navigate2 вставить указатель на этот буфер...
П.С. Заранее зная что такой возможности у этой функции нет, предлагаю тебе Умник, придумать такую реализацию для классa CHTMLView...
Реализацию с помощью других классов не предлагать.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Anchorite
Гость
|
|
« Ответ #11 : 05-03-2005 14:45 » |
|
Это просто мысль, но нельзя воспользоваться отображаемыми в память файлами?
|
|
|
Записан
|
|
|
|
daxhny
Гость
|
|
« Ответ #12 : 07-03-2005 07:39 » |
|
2Гром Я Не прав , Я это понял еще когда давил кнопку пост А мысль про мапфайл вполне здравая она мне тоже в голову приходила пока сгорая от стыда я думал какова реация на мой хамский пост
Форум RSDN я не люблю ваш круче
|
|
|
Записан
|
|
|
|
Serega
Гость
|
|
« Ответ #13 : 07-03-2005 08:17 » |
|
а MSDN все же рулит LPDISPATCH CHtmlView::GetHtmlDocument(); с помощью QueryInterface получаем: IHTMLDocument - работа со скриптовым движком IHTMLDocument2 - работа с докуметом IHTMLDocument3 - создание фрагментов/документов и феньки вроде поиска и дополнительных обработчиков событий нас интересует IHTMLDocument2, создаем его с помощью IHTMLDocument3::createDocumentFragment далее нам нужно получить элемент body: HRESULT IHTMLDocument2::get_body(IHTMLElement **p); у этого элемента есть много полезных для нас функций: HRESULT IHTMLElement::put_innerHTML(BSTR v); HRESULT IHTMLElement::put_innerText(BSTR v); HRESULT IHTMLElement::insertAdjacentHTML(BSTR where, BSTR html); HRESULT IHTMLElement::insertAdjacentText(BSTR where, BSTR text); работа не столь сложная на первый взгляд, как это работает на практике не знаю =)
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #14 : 07-03-2005 09:08 » |
|
Anchorite Параметром у функций Navigate принимается URL типа file:// на диске, или http:// обычный в интернете. Мапированные файлы в память такого типа пути не имеют насколько я помню. Серега, похоже ты попал в точку, но все это надо проверить. Но самое главное, методы с которыми ты предлагаешь повозиться не являются напрямую методами класса CHTMLView - это уже обращение к объекту который за ним...
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #15 : 07-03-2005 09:09 » |
|
daxhny, ответил в письме - извинения приняты - санкций не будет Привет тебе на нашем форуме.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Serega
Гость
|
|
« Ответ #16 : 07-03-2005 18:34 » |
|
Серега, похоже ты попал в точку, но все это надо проверить. Но самое главное, методы с которыми ты предлагаешь повозиться не являются напрямую методами класса CHTMLView - это уже обращение к объекту который за ним... Гром ты что-то видимо не так понимаешь, CHTMLView ничего сам не делает, это просто адаптер для COM обьекта InternetExplorer если посмотреть код, то там будет указатель IWebBrowser2
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #17 : 07-03-2005 19:02 » |
|
Серег - как раз я правильно понял Я знаю что весь MFC сам ничего не делает. Все классы это всего лишь прослойка между API и пользователем, между Interface и пользователем и т.д. Но я когда работаю с простыми классами не заморачиваюсь с работой с интерфейсом, а если я переключаюсь на интерфейсы, так на фиг мне частично использовать прослойку CHTMLView
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Anchorite
Гость
|
|
« Ответ #18 : 08-03-2005 07:45 » |
|
Гром, а скажи пжлста, нальзя ли воспользоваться файлам при создании которых выставлены флаги FILE_ATTRIBUTE_TEMPORARY и FILE_FLAG_DELETE_ON_CLOSE? Файл создашь во временной папке. При закрытии он грохнется. А т.к. стоит FILE_ATTRIBUTE_TEMPORARY то система попытается не запысывать его содержимое на диск без необходимости.
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #19 : 08-03-2005 07:49 » |
|
Anchorite - можно кончено. Но 1. Мне не нужно его открывать и закрывать. Я его должен сформировать и закрыть потом сделать на него Navigate. Стирать можно только по окончании работы с программой - т.е. делать не один а кучу темп файлов - и следить повторяется ли запрос к БД или нет - морока. 2. Работа с HDD всегда медленне чем с памятью, да и для харда постоянное открытие и закрытие файлов - это моветон с стороны программера. Когда без этого не обойтись то другое дело, а вот когда так криво писать - просто нет желания. 3. Есть возможность сделать это более сложно через .NET технологию - просто времеени нету, да и задачка отменилась, счас просматриваю RSS возможность подключения к сайту. Как сделаею - будеит возможность следить за сайтом не заходя на него все время...
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Serega
Гость
|
|
« Ответ #20 : 08-03-2005 08:31 » |
|
Но я когда работаю с простыми классами не заморачиваюсь с работой с интерфейсом, а если я переключаюсь на интерфейсы, так на фиг мне частично использовать прослойку CHTMLView Без CHTMLView тебе будет сложно(очень ) раз уж ты завязался на MFC А кто говорил о мороке с интерфейсами ? Главная заморочка - MFC Не помню как это делается, но надо импортить IDL описание эксплореровское чтобы VS тебе создала обертки MFC-шные Есть возможность сделать это более сложно через .NET технологию - просто времеени нету, да и задачка отменилась, счас просматриваю RSS возможность подключения к сайту. Как сделаею - будеит возможность следить за сайтом не заходя на него все время... А причем тут это ? или это не имеет отношения к MFC ? Вариант: не изобретать велосипед а воспользоваться хорошей CMS у меня сайт на мамбе работает, забирать инфу можно в RSS, Atom и OPML также сообществом создано много модулей для интегриции форумов, галерей, библиотек, факов, файловых архивов и т.д. Это наверно оффтоп, можно удалить если не интересно
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #21 : 08-03-2005 08:59 » |
|
Serega - ты клевещешь. Наш сайт работает на нашем же движке. Сейчас стоит задача - обеспечить экспорт всего что надо - через RSS. Раньше думал сделать офлайн базу, теперь тут: http://faq.shelek.com такая программка уже есть - остается написать конвертер для нас самих и офлайн сайт готов - можно выпускать...
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #22 : 08-03-2005 09:00 » |
|
Что касается MFC и Interface второе много сложнее - первое не менее кривое. ИМХО разумеется. Кроме того - из классики, тебе всегда легко то, что ты уже умеешь и тяжело новое. Есть в этом супер истина. Я знаю MFC - очень неплохо, а с интерфейсами возился мало - все задач не было. Вот поэтому пыталс так. Собственно тема потеряла актуальность давненько - просто раз поднялась - рассказываю..
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
|