Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как загрузить HTML-код в определенный фрейм страницы браузера? [D6, WinXP]


ТехникПТО ©   (2005-03-12 18:33:00) 

Есть переменная s в которой содержиться полный хтмл код страницы... его нужно загрузить в определенный фрейм страницы...КАК это сделать?


programania   (2005-05-15 22:41:00) [1]

>его нужно загрузить в определенный фрейм страницы...

фреймы хранятся в отдельных файлах
туда и записать этот текст
и загрузить повторно основную страницу navigate.
А если ссылка на фрейм ведет в интернет,
изменить ее на локальный файл в тексте загруженом в WB
как описано выше.


SherZod   (2005-05-15 22:10:00) [2]

Сначало инициализируем пустой документ в TWebBrowser

procedure TForm1.FormCreate(Sender: TObject);
begin
 // Инициализируем пустой документ в TWebBrowser
 WebBrowser1.Navigate('about:blank');
end;

А патом заружаем строку в TWebBrowser

procedure TForm1.Button1Click(Sender: TObject);
var
 Document: IHTMLDocument2;
 V: OleVariant;
begin
 // Этот метод переписывает в TWebBrowser HTML-
 // документ из TMemo
 Document := WebBrowser1.Document as IHtmlDocument2;
 V := VarArrayCreate([0, 0], varVariant);
 V[0] := Memo1.Text;
 Document.Write(PSafeArray(TVarData(v).VArray));
 Document.Close;
end;


Aleksvz   (2005-03-22 12:38:00) [3]

Народ помогите пожалуйста
Все время пользовался именно таким (приведенным) методом, для загрузки html страниц целиком в WebBrowser. И никогда не было никаких проблем. Но на некоторых компах строка
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
вызывает ошибку обращения к памяти:
"Access Violation at adress XXXXXXXX im module Module_Name.exe Read of adress FFFFFFFF". В описании ошибки говориться, что она возникает при попытке обращения к закрытой области памяти, использование объекта, которому не выделена память, либо осуществляется попытка оичстить память, которая была выделена в другом модуле. Но при чем здесь эта ошибка (именно в этой строке) не могу понять. В чем я не прав и как исправить эту проблему. Заранее спасибо


SergP   (2005-03-12 21:40:00) [4]

Щас попытаюсь. 135788150


ТехникПТО   (2005-03-12 21:39:00) [5]

выйдете в асю если есть возможность


ТехникПТО   (2005-03-12 21:38:00) [6]

[Error] Unit1.pas(525): There is no overloaded version of 'Navigate' that can be called with these arguments

Url1:='about:'+s;
Form1.EmbeddedWB1.Navigate(URL,1,Form1.EmbeddedWB1.OleObject.Document.frames.item(3).Document);


SergP   (2005-03-12 21:29:00) [7]

Открой ИЕ и введи в строку с УРЛОМ вот это:

about:<html>Я%20Вася%20Пупкин</html>

и поймешь....


SergP   (2005-03-12 21:27:00) [8]


> так то s это переменная в которой содержиться HTML-код страницы!!!


Ну правильно.

var
URL:string;
...
begin
...
URL:='about:'+s;
Webbrowser.Navigate(URL, ... и остальные параметры...


ТехникПТО   (2005-03-12 21:25:00) [9]


> 'about:'+s

так то s это переменная в которой содержиться HTML-код страницы!!!


SergP   (2005-03-12 21:24:00) [10]

Только если s у тебя большая то браузер может ее "обрезать"


SergP   (2005-03-12 21:23:00) [11]


>  [2] ТехникПТО ©   (12.03.05 21:00)
> хм... а URL??? какой?? :(


'about:'+s


ТехникПТО   (2005-03-12 21:00:00) [12]

хм... а URL??? какой?? :(


SergP   (2005-03-12 19:41:00) [13]

Не пробовал никогда так делать, но думаю что можно либо через navigate используя протокол about.

procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant);

Только конечно если длина переменной не очень большая, до 1,5-2 Кб

Либо каким-нить другим методом, типа:

procedure TForm1.WBLoad(HTMLstring:string);
var
 v: Variant;
 HTMLDocument: IHTMLDocument2;
begin
 HTMLDocument := WB.Documentas IHTMLDocument2;
 v := VarArrayCreate([0, 0], varVariant);
 v[0] := HTMLString;
 HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
 HTMLDocument.Close;
end;

Только вместо этого (WB.Document) указать на документ конкретного фрейма.
не знаю будет ли работать, но мне лень щас с фреймами возиться.


Наверх

Титульная страница Поиск, карта сайта Написать письмо