Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

Текст из Мемо в WebBrowser   Найти похожие ветки 

 
Babay ©   (2004-06-04 09:18) [0]

Доброго времени суток увжаемые!!!

Вопросик вот какого плана. Есть на форме Memo и WebBrowser в мемо находится HTML текст нужно его загрузить в WebBrowser. Нашел 2 примера как это сделать, но почему то не работает, вылетает Access Violation. Подскажите куда копать или код подкиньте ежели можно.

Делаю так


uses mshtml, activex;

// вариант 1
function TForm1.LoadFromStream(const AStream: TStream): HRESULT;
begin
 AStream.seek(0, 0);
 Result := (WebBrowser1.Document as
         IPersistStreamInit).Load(TStreamAdapter.Create(AStream));<--- вот тут и вылетает
end;

procedure TForm1.Button1Click(Sender: TObject);
Var st1:TMemoryStream;
begin
st1:=TMemoryStream.Create;
memo1.Lines.SaveToStream(st1);
LoadFromStream(st1);
st1.free;
end;

// вариант 2
procedure TForm1.Button2Click(Sender: TObject);
var
 v: Variant;
 HTMLDocument: IHTMLDocument2;
begin
 HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
 v := VarArrayCreate([0, 0], varVariant);
 v[0] := Memo1.text; // this is your html string
 HTMLDocument.Write(PSafeArray(TVarData(v).VArray));<--- вот тут вылетает
 HTMLDocument.Close;
end;


 
dreamteller   (2004-06-04 12:28) [1]

лучше сохранить текст в файл с расширением html и открыть данный файл WebBrowser:
memo1.lines.savetofile(имя файла);
webbrowser.navigate(имя файла);


 
Babay ©   (2004-06-08 10:44) [2]

Это и так ясно...
Мне бы как нибудь без файла обойтись. Может кто знает?

З.Ы. Извиняюсь за свое отсутствие, инета не было


 
SergP ©   (2004-06-08 11:05) [3]


>
> // вариант 2
> procedure TForm1.Button2Click(Sender: TObject);
> var
>  v: Variant;
>  HTMLDocument: IHTMLDocument2;
> begin
>  HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
>  v := VarArrayCreate([0, 0], varVariant);
>  v[0] := Memo1.text; // this is your html string
>  HTMLDocument.Write(PSafeArray(TVarData(v).VArray));<---
> вот тут вылетает
>  HTMLDocument.Close;
> end;

Я юзаю такое, но у меня никто нигде не вылетает.
Что у тебя находится в браузере до выполнения этого кода?

Может ты забыл перед этим создать документ в браузере, хотя бы так:
Webbrowser1.Navigate("about:blank"); ????



 
SergP ©   (2004-06-08 11:09) [4]


>  [3] SergP ©   (08.06.04 11:05)


Кстати если хочешь юзать этот второй вариант, то Webbrowser1.Navigate("about:blank");  делай один раз, например в OnCreate главной формы., иначе будут проблемы связаный с утечкой памяти. Я не проверял, но так люди говорят...


 
Babay ©   (2004-06-08 11:25) [5]

То SergP © Спасибо

> Может ты забыл перед этим создать документ в браузере, хотя
> бы так:
> Webbrowser1.Navigate("about:blank"); ????

помогло, плохо когда забыл да еще и не знал ;-)))

Считаю вопрос исчерпан.


 
nikkie ©   (2004-06-09 02:18) [6]

>делай один раз, например в OnCreate главной формы., иначе будут проблемы связаный с утечкой памяти.
нет, надо просто писать WebBrowser1.DefaultInterface.Document вместо WebBrowser1.Document. тогда утечки не будет независимо от вызовов Navigate.


 
Babay ©   (2004-06-09 05:39) [7]

Оказалось что вопрос исчерпан не совсем :-( ....

Делаю по варианту 2 (см. вопрос) все ок. Но у меня в HTML тесте есть ссылки на рисунки находящиеся в определенной папке, естественно ссылки условные например: src="image/image001.gif"
и получается что Webbrowser этих картинок не грузит так как невидит.
Вопрос как задать директорию с картинками для Webbrowser? или может как то можно перепрописать пути для картинок точно указав расположение?


 
TUser ©   (2004-06-09 06:23) [8]

WebBrowser1.Navigate2("about:"+Memo1.Lines.Text);


 
Babay ©   (2004-06-09 09:50) [9]

То TUser спасибо, но второй вопрос[7] это не решает...


 
Gero ©   (2004-06-09 09:54) [10]


> TUser ©   (09.06.04 06:23)

Зачем всякий бред советовать?

> Babay ©   (09.06.04 05:39)

Используйте абсолютные пути.


 
Babay ©   (2004-06-09 11:22) [11]

я бы рад но ситуация следующая
HTML формирую не я. Я его получаю в текстовом виде (неважно откуда) и так же имею к нему соответствующий набор картинок которые прописаны там относительными путями. Картинки я могу уложить в любую папку, но сам HTML кидать на диск нельзя вот и перекидую его из StringList (в вопросе Memo просто в пробном проекте использую чтоб контроль за ситуацией иметь, а так его небудет). Но при перекидке картинки не подцепляются вот в этом то и вопрос, как переделать относительные пути на абсолютные?
HTML лопатить чето не очень охота, да и долго может быть, у меня некоторые до 1,5 мб доходят.

нашел вот такой пример но опять чего то не пашет.
Делаю так:
в WebBrowser загружен документ ( пробовал даже сохраненный с диска)
а дальше по примеру который заменяет все картинки

procedure TForm1.Button1Click(Sender: TObject);
var
 li: Word;
begin
 // Loop through all images of a TWebbrowser
 // Schleife ьber alle Bilder im Webbrowser
 for li := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do // <- вот здесь длинна всегда =0
   // Exchange image with an own image
   // Austauschen der Bilder im webbrowser - durch "MyImage.gif"
   WebBrowser1.OleObject.Document.Images.Item(0).Src := "c:\MyImage.gif"; // <- соответственно здесь вылет по ошибке.
end;

Честно сказать с WebBrowser практически не работал, а тут вот понадобилось и приткнулся....
Мож у кого ссылки есть по этому поводу чтоб почитать, поразбираться. А то работаю методом втыка, и задаю глупые вопросы.


 
SergP ©   (2004-06-09 11:44) [12]

Удалено модератором


 
SergP ©   (2004-06-09 11:44) [13]

Удалено модератором


 
SergP ©   (2004-06-09 11:44) [14]


>  [8] TUser ©   (09.06.04 06:23)
> WebBrowser1.Navigate2("about:"+Memo1.Lines.Text);


Весьма глючный вариант.... Не советую юзать такое....


> Используйте абсолютные пути.


Лучше в HEAD странички прописать базовый путь:
Что-то типа так
CurentPath:=ExtractFileDir(ParamStr(0))+"\твоя папка с рисунками";
И вставить строку "<BASE HREF="file://"+CurentPath+"/">" в HEAD


 
SergP ©   (2004-06-09 11:47) [15]

Связь паршивая.... Плиз поудаляйте дубли (первые 2 мои месаги)


 
Babay ©   (2004-06-09 12:52) [16]

ага помогло спасибо, но правда на обычном HTML документе.
А вот если документ был сформирован вордом, то непомогает, он тама больно хитрый получается из за того, что в документе формулы используются. Ладно будем пробовать....
Еще раз спасибо


 
SergP ©   (2004-06-09 13:17) [17]


> он тама больно хитрый получается из за того, что в документе
> формулы используются.


А какая разница? Просто вставь <BASE HREF..... после <HEAD>
и все что с относительными ссылками будет привязываться к этой папке...

Или Ворд как-то не так странички делает?


 
Babay ©   (2004-06-10 04:40) [18]


> Или Ворд как-то не так странички делает?

ага именно так, там какая то завязка с OLE...
если интересно попробуй в ворде создать документ, вставь в него рисунок и формулу сохрани как HTML, а потом попробуй загнать в WebBrowser.
Если брать страничку с диска то все ок, а если загонять как описано в вопросе то ничего не выходит, невидит он.... даже если прописать <BASE HREF..... после <HEAD>


 
SergP ©   (2004-06-10 08:13) [19]

Хм. Попробую посмотреть что там ворд делает.
кстати, а обязательно тебе все это делать вордом?


> <BASE HREF="file://......


Хм... Что-то я немного неправильно написал...
Должно быть ...file:///... (три слеша)



Страницы: 1 вся ветка

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.024 c
3-1086162787
inkotex
2004-06-02 11:53
2004.06.27
Подключение к базе через сеть


1-1086895435
DDA
2004-06-10 23:23
2004.06.27
Номер Потока и запуск его


4-1084786682
oleg_senator
2004-05-17 13:38
2004.06.27
Работа со звуком


1-1086929618
Князев Сергей
2004-06-11 08:53
2004.06.27
Почему Delphi так корябает экзешники между сборками


8-1081418501
@ndrew
2004-04-08 14:01
2004.06.27
рисование на канве