Форум: "Основная";
Текущий архив: 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