Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Сломал голову на фреймах в TWebBrowser :( Помогите...   Найти похожие ветки 

 
ForumReader   (2009-05-04 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   (2009-05-05 07:06) [1]

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


 
ForumReader   (2009-05-06 11:30) [2]

... и даже не мало заплачУ :(

никто вообще не шарит? :\


 
Сергей М. ©   (2009-05-06 12:41) [3]


> что я делал, чтобы изменить данную страницу


В обработчике какого события ты делаешь это ?


 
ForumReader   (2009-05-06 12:52) [4]


> В обработчике какого события ты делаешь это ?

Страница полностью загружена, нажимаю на форме кнопку и в ее обработчике пишу этот код.. Он как бы работает, но контент загруженный пропадает полностью. Остается разделение экрана на эти 2 фрейма и белый экран :\
Но я ТОЧНО знаю, что это возможно, ибо видел работающие примеры :(


 
Palladin ©   (2009-05-06 13:19) [5]

а если указать полный src, а не относительный ?


 
Сергей М. ©   (2009-05-06 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;


 
Сергей М. ©   (2009-05-06 14:08) [7]


> Я даже заплачУ


Изволь сдержать слово и выполнить обещание)

Клади сюда:

WebMoney: R288065700395


> и даже не мало заплачУ


Ту же сумму, но сюда:

WebMoney: E435338015555

))


 
ForumReader   (2009-05-06 14:44) [8]

Сергей, я от своих слов не отказываюсь и денежка однозначно будет, но есть маааленькое "но", у меня frameset не имеет имени :(

Он выглядит именно так, как указано в первом сообщении...


 
Сергей М. ©   (2009-05-06 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   (2009-05-06 16:01) [10]

Как хорошо быть умным (утирает слезу).

Сергей, СПАСИБО! Через 2 часа переведу денег, будет мало - скажешь :)

Оно работает... Блин :)


 
Сергей М. ©   (2009-05-06 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;


 
Сергей М. ©   (2009-05-06 19:40) [12]


> Через 2 часа переведу денег


Все в порядке.
Приятно иметь дело с джентльменом !


 
Igor2010   (2009-05-06 20:59) [13]


> и даже не мало заплачУ


безобразие.......


 
Семен   (2010-02-12 11:08) [14]

Сергей М у меня к вам есть несколько вопросов, за которые я так же готов заплатить. Вы могли связаться со мной по аське 353575160


 
Сергей М. ©   (2010-02-13 12:42) [15]

ICQ UIN 353575160 не найден ..

Уточни или укажи иные координаты


 
DVM ©   (2010-02-14 14:59) [16]


> Сергей М. ©  

Пора создавать платный раздел форума "Спросите у  Сергея М." :)



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.053 c
15-1343668211
vasa777
2012-07-30 21:10
2013.03.22
дельфи устарело


15-1339674715
ProgRAMmer Dimonych
2012-06-14 15:51
2013.03.22
Часто используемые программы в "Пуске" Windows 7


9-1192647962
Ricks
2007-10-17 23:06
2013.03.22
Screen-aligned quad


15-1339068423
Zheksonz
2012-06-07 15:27
2013.03.22
Синтаксис языка Си


15-1333826589
Дмитрий С
2012-04-07 23:23
2013.03.22
Занимает ли пустой файл блок в fat32 или ext3?