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

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

Сломал голову на фреймах в 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]

Товарищи! Я даже заплачУ за решение данной задачки :)


Наверх

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