![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сломал голову на фреймах в TWebBrowser :( Помогите...
ForumReader © (2009-05-04 09:52:00)День добрый, уважаемые!
Задача в 2х словах: есть страница, в ней 2 фрейма. Нужно динамически (не перазагружая полностью контент) изменить высоту фреймов (в % от высоты экрана).
Код главной страницы вот:
<html><head></head>
<frameset rows="*, 50%" frameborder="0" framespacing="0">
<frame name="primary" src="primary.php" scrolling="no"></frame>
<frame name="secondary" src="secondary.php" scrolling="no"> </frame>
</frameset>
<body></body></html>
что я делал, чтобы изменить данную страницу:
doc: IHtmlDocument2;
v : Variant;
...
webBrowser.ControlInterface.Document.QueryInterface(IHtmlDocument2, doc);
v := VarArrayCreate([0, 0], varVariant);
v[0]:='html с подкорретированным "...<frameset rows="*, 50%" ...";
doc.Write(PSafeArray(TVarData(v).VArray));
doc.close;
Так вот, размер фреймов меняется, но! загруженные страницы исчезают, остается белый экран :(
Помогите изменить динамически высоту фреймов, которые уже загружены в TWebBrowser :(
Заранее благодарен.
DVM (2010-02-14 14:59:00) [1]
> Сергей М. ©
Пора создавать платный раздел форума "Спросите у Сергея М." :)
Сергей М. (2010-02-13 12:42:00) [2]ICQ UIN 353575160 не найден ..
Уточни или укажи иные координаты
Семен (2010-02-12 11:08:00) [3]Сергей М у меня к вам есть несколько вопросов, за которые я так же готов заплатить. Вы могли связаться со мной по аське 353575160
Igor2010 (2009-05-06 20:59:00) [4]
> и даже не мало заплачУ
безобразие.......
Сергей М. (2009-05-06 19:40:00) [5]
> Через 2 часа переведу денег
Все в порядке.
Приятно иметь дело с джентльменом!
Сергей М. (2009-05-06 16:23:00) [6]Ну и последний "причесывающий" штрих:
var
MyURL: String;
procedure TForm1.Button6Click(Sender: TObject);
begin
MyURL := AnsiUpperCase('c:\test.html');
WebBrowser.Navigate('c:\test.html');
end;
procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
Document: IHtmlDocument2;
Collection: IHTMLElementCollection;
Frameset: IHTMLFrameSetElement;
begin
if AnsiUpperCase(URL) <> MyURL then Exit; //нет никакого резона повторять одно и то же 3 раза
Document := Webbrowser.ControlInterface.Document as IHtmlDocument2;
Collection := Document.All.Tags('frameset') as IHTMLElementCollection;
Frameset := Collection.Item(0, 0) as IHTMLFrameSetElement;
Frameset.rows := '*, 30%';
end;
ForumReader (2009-05-06 16:01:00) [7]Как хорошо быть умным (утирает слезу).
Сергей, СПАСИБО! Через 2 часа переведу денег, будет мало - скажешь :)
Оно работает... Блин :)
Сергей М. (2009-05-06 15:51:00) [8]
> frameset не имеет имени
Что мешает его задать ?
И даже если такой возможности нет, пример приведет для илююстрации того, в какой момент времени следует модифицировать документ - после его загрузки, но дотого как браузер начнет интерпретировать образованное после загрузки и парсинга дерево объектов загружененого документа.
Вот тебе тоже самое, но для анонимного фреймсета:
procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
Collection: IHTMLElementCollection;
Frameset: IHTMLFrameSetElement;
begin
// memo.Lines.Add('DocumentComplete - ' + URL);
webbrowser.ControlInterface.Document.QueryInterface(IHtmlDocument2, doc);
Collection := doc.all.tags('frameset') as IHTMLElementCollection;
Frameset := Collection.Item(0, 0) as IHTMLFrameSetElement;
Frameset.rows := '*, 30%';
end;
ForumReader (2009-05-06 14:44:00) [9]Сергей, я от своих слов не отказываюсь и денежка однозначно будет, но есть маааленькое "но", у меня frameset не имеет имени :(
Он выглядит именно так, как указано в первом сообщении...
Сергей М. (2009-05-06 14:08:00) [10]
> Я даже заплачУ
Изволь сдержать слово и выполнить обещание)
Клади сюда:
WebMoney: R288065700395
> и даже не мало заплачУ
Ту же сумму, но сюда:
WebMoney: E435338015555
))
Сергей М. (2009-05-06 13:34:00) [11]
<html><head></head>
<frameset name="myframeset"rows="*, 50%" frameborder="0" framespacing="0">
<frame name="primary" src=" http://google.ru" scrolling="no"></frame>
<frame name="secondary" src=" http://www.delphimaster.ru" scrolling="no"> </frame>
</frameset>
<body></body></html>
procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
memo.Lines.Add('DocumentComplete - ' + URL);
webbrowser.ControlInterface.Document.QueryInterface(IHtmlDocument2, doc);
(doc.all.item('myframeset', 0) as IHTMLFrameSetElement).rows := '*, 30%';
end;
Palladin (2009-05-06 13:19:00) [12]а если указать полный src, а не относительный ?
ForumReader (2009-05-06 12:52:00) [13]
> В обработчике какого события ты делаешь это ?
Страница полностью загружена, нажимаю на форме кнопку и в ее обработчике пишу этот код.. Он как бы работает, но контент загруженный пропадает полностью. Остается разделение экрана на эти 2 фрейма и белый экран :\
Но я ТОЧНО знаю, что это возможно, ибо видел работающие примеры :(
Сергей М. (2009-05-06 12:41:00) [14]
> что я делал, чтобы изменить данную страницу
В обработчике какого события ты делаешь это ?
ForumReader (2009-05-06 11:30:00) [15]... и даже не мало заплачУ :(
никто вообще не шарит? :\
ForumReader (2009-05-05 07:06:00) [16]Товарищи! Я даже заплачУ за решение данной задачки :)