Конференция "Сети" » Сломал голову на фреймах в TWebBrowser :( Помогите...
 
  • 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 не найден ..

    Уточни или укажи иные координаты
  • DVM © (14.02.10 14:59) [16]

    > Сергей М. ©  

    Пора создавать платный раздел форума "Спросите у  Сергея М." :)
 
Конференция "Сети" » Сломал голову на фреймах в TWebBrowser :( Помогите...
Есть новые Нет новых   [134438   +31][b:0][p:0.002]