Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Вниз

Текст из Мемо в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.035 c
4-1084854915
Глеб
2004-05-18 08:35
2004.06.27
Спрятать в системный трей


4-1084796982
KORN
2004-05-17 16:29
2004.06.27
Копирование с "msctls_progress32"


10-1015060362
alvillo
2002-03-02 12:12
2004.06.27
Можно ли бесплатно разместить в Сети CORBA-сервер и где?


14-1086852593
Pro
2004-06-10 11:29
2004.06.27
Нужна прога типа Диспетчер Задач


1-1087275595
try
2004-06-15 08:59
2004.06.27
Извлечение имени папки диска





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский