-
ForumReader (04.05.09 09:52) [0]День добрый, уважаемые!
Задача в 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 :(
Заранее благодарен. -
ForumReader (05.05.09 07:06) [1]Товарищи! Я даже заплачУ за решение данной задачки :)
-
ForumReader (06.05.09 11:30) [2]... и даже не мало заплачУ :(
никто вообще не шарит? :\ -
Сергей М. © (06.05.09 12:41) [3]
> что я делал, чтобы изменить данную страницу
В обработчике какого события ты делаешь это ? -
ForumReader (06.05.09 12:52) [4]
> В обработчике какого события ты делаешь это ?
Страница полностью загружена, нажимаю на форме кнопку и в ее обработчике пишу этот код.. Он как бы работает, но контент загруженный пропадает полностью. Остается разделение экрана на эти 2 фрейма и белый экран :\
Но я ТОЧНО знаю, что это возможно, ибо видел работающие примеры :( -
Palladin © (06.05.09 13:19) [5]а если указать полный src, а не относительный ?
-
Сергей М. © (06.05.09 13:34) [6]<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; -
Сергей М. © (06.05.09 14:08) [7]
> Я даже заплачУ
Изволь сдержать слово и выполнить обещание)
Клади сюда:
WebMoney: R288065700395
> и даже не мало заплачУ
Ту же сумму, но сюда:
WebMoney: E435338015555
)) -
ForumReader (06.05.09 14:44) [8]Сергей, я от своих слов не отказываюсь и денежка однозначно будет, но есть маааленькое "но", у меня frameset не имеет имени :(
Он выглядит именно так, как указано в первом сообщении... -
Сергей М. © (06.05.09 15:51) [9]
> 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 (06.05.09 16:01) [10]Как хорошо быть умным (утирает слезу).
Сергей, СПАСИБО! Через 2 часа переведу денег, будет мало - скажешь :)
Оно работает... Блин :) -
Сергей М. © (06.05.09 16:23) [11]Ну и последний "причесывающий" штрих: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; -
Сергей М. © (06.05.09 19:40) [12]
> Через 2 часа переведу денег
Все в порядке.
Приятно иметь дело с джентльменом ! -
Igor2010 (06.05.09 20:59) [13]
> и даже не мало заплачУ
безобразие....... -
Семен (12.02.10 11:08) [14]Сергей М у меня к вам есть несколько вопросов, за которые я так же готов заплатить. Вы могли связаться со мной по аське 353575160
-
Сергей М. © (13.02.10 12:42) [15]ICQ UIN 353575160 не найден ..
Уточни или укажи иные координаты -
> Сергей М. ©
Пора создавать платный раздел форума "Спросите у Сергея М." :)