Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с заливкой в WebBrowser HTML 
V
    Опции темы
Platov
Дата 1.5.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



На форме есть несколько WebBrowser-ов  сделал такую функцию заполнения их кодом HTML.
С WebBrowser я работал крайне редко и в основном для отображения страниц из интернета или сохранённых на диске, а тут тексты страничек есть в AnsiString и хотелось бы затолкать из напрямую.
Так вот этот, код работает, но только в ПЕРВЫЙ раз для каждого WebBrowser-а. При последующих обращениях WebBrowser остаётся пустым, а при отображении кода HTML в контекстном меню "<HTML></HTML>"


Код

void __fastcall TForm1::HTMLtoWebbr(int n,AnsiString s)
{


TComponent *lab;

lab=Form1->FindComponent("WebBrowser"+String(n));

if (lab!=NULL)
{
TMemoryStream *stm = new TMemoryStream();

stm->Seek(0,0);
stm->Write(s.c_str(),s.Length());

stm->Seek(0,0);
IPersistStreamInit *psi=NULL;
TStreamAdapter *sa = new TStreamAdapter(stm,soReference);

dynamic_cast<TWebBrowser*>(lab)->Navigate("about:blank");

if (SUCCEEDED(dynamic_cast<TWebBrowser*>(lab)->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))
{
    psi->Load(*sa);
    psi->Release();
}
delete stm;


}


}



Что я делаю не так? Может как-то очищать надо WebBrowser? И как? 

Это сообщение отредактировал(а) Platov - 3.5.2010, 16:57
PM MAIL   Вверх
Domain
Дата 4.5.2010, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 11.3.2010

Репутация: нет
Всего: нет



попробуй обновлять перед тем как код там отображаешь. refresh вроде. и не совсем понятно, ты используешь этот код для отображения кода страницы? 
PM MAIL   Вверх
Platov
Дата 4.5.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



Domain,  спасибо что откликнулся!
Попробую про рефрешить. 
А отображаю очень просто - в функцию передаю номер WebBrowser и собственно код странички.
PM MAIL   Вверх
Platov
Дата 4.5.2010, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



Цитата(Domain @  4.5.2010,  10:45 Найти цитируемый пост)
попробуй обновлять перед тем как код там отображаешь. refresh

обновление на пустом контроле приводит к ошибке, а с загруженной страничкой очищает контрол. Следующий раз страничка уже не заливается как и раньше.


Это сообщение отредактировал(а) Platov - 4.5.2010, 17:56
PM MAIL   Вверх
Platov
Дата 12.5.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



Может знатоки Delphi переведут мне следующий текст так чтобы работало в c++ Builder...

Код

var
  v: Variant;
  HTMLDocument: IHTMLDocument2;  
begin
  HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
  v := VarArrayCreate([0, 0], varVariant);
  v[0] := HTMLString; 
  HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
  HTMLDocument.Close;

  ...
end;

PM MAIL   Вверх
Platov
Дата 15.5.2010, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



Проблема в том что строка 
Код

dynamic_cast<TWebBrowser*>(lab)->Navigate("about:blank");
лишняя. 

Вместо неё, чтобы работало более одного раза нужно добавить такой код
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
WebBrowser1->Navigate(WideString("about:blank").c_bstr(),navNoWriteToCache);
WebBrowser2->Navigate(WideString("about:blank").c_bstr(),navNoWriteToCache);
.......
}


Теперь всё работает.
К сожалению, в очередной раз некого поблагодарить!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.