Как управлять размером фрейма в TWebBrowser?
От: Good Man  
Дата: 02.08.02 17:45
Оценка:
HTML-страница состоит из двух фреймов: левого фрейма содержания «contents» и правого фрейма «mainFrame».

Как правило, размеры страницы находящейся в правом фрейме «mainFrame » бываю велики. Возникает необходимость срыть левый фрейм «contents».

Пытаюсь сделать это так:

var
HTML_Doc: IHTMLDocument2;
oWindow: IHTMLWindow2;
oBody:  IHTMLBodyElement;
oRange: IHTMLTxtRange;
oFrame: OleVariant;


В событии TWebBrowser.OnDocumentComplete пишу следующий код:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  i: integer;
  Label Lab1 ;
begin
  IsFrameCont := false;

  HTML_Doc := WebBrowser1.Document As IHTMLDocument2;

  if (HTML_Doc <> nil) then
     begin
     oWindow := HTML_Doc.parentWindow As IHTMLWindow2;
     if (oWindow.frames.Get_length > 1) then
        //страница с фреймами
        begin
         //определяем начальный фрейм
         for i := 0 to oWindow.frames.Get_length - 1 do
           begin
             index_frame := i;
             try
              name_frame := oWindow.frames.item(index_frame).name;
             except
              Exit;
             end;
             if (name_frame = '') then
                goto Lab1
             else
                begin
                  Search_frame := oWindow.frames.item(index_frame).name;
                  if Pos('contents', AnsiLowerCase(Search_frame)) > 0 then
                     begin

                      oFrame := oWindow.frames.item(index_frame);
                      IsFrameCont := true;
                     end;
                  if Pos('main', AnsiLowerCase(Search_frame)) > 0 then break;
                end;
           end;

         try
           IsFrame := true;
           oRange1 := oWindow.frames.item(index_frame).document.body.createTextRange;
         except
           Exit;
         end;

        end
     else
        //нет фреймов
        begin
Lab1:
         try
           begin
            oBody := HTML_Doc.get_body As IHTMLBodyElement;
            if (oBody <> nil) then oRange := oBody.createTextRange;
           end
         except
           Exit;
         end;
         IsFrame := false;
        end;
     end;

  if (PosText) AND (HTML_Doc.Get_readyState='complete') then
     begin
       SearchInHtml(Form1.FindText);
       PosText := false;
     end;


end;


В событии нажатия кнопки управления размером фрейма пытаюсь изменить его размер:

procedure TForm1.Button1Click(Sender: TObject);
var str: AnsiString;

begin
  if IsFrameCont then
     begin
       if MinFrame = false then
          begin
           oFrame.cols := '0,*';
            MinFrame := true;
          end
       else
          begin
            oFrame.cols := '175,*';
            MinFrame := false;
          end;
     end;
end;


Delphi сообщают, что Ole-объект не поддерживает данное свойство.
Подскажите, как быть?
Best wishes, Taras
Re: Как управлять размером фрейма в TWebBrowser?
От: Головатенко Алексей Сергеевич Россия  
Дата: 04.08.02 00:29
Оценка: 6 (1)
Здравствуйте Good Man, Вы писали:

GM>HTML-страница состоит из двух фреймов: левого фрейма содержания «contents» и правого фрейма «mainFrame».


GM>Как правило, размеры страницы находящейся в правом фрейме «mainFrame » бываю велики. Возникает необходимость срыть левый фрейм «contents».


GM>.................................................................


GM>Delphi сообщают, что Ole-объект не поддерживает данное свойство.

GM>Подскажите, как быть? :???:


Не FRAME имеет атрибут cols,а FRAMESET


procedure TForm1.Button1Click(Sender: TObject);
begin
IHTMLFrameSetElementDisp(
 HTMLElementCollection(
  HTML_Doc.All.Tags('FRAMESET')
 ).item(0,varEmpty)   // 0, если FRAMESET первый
).cols:='175,*';  
end;
Re[2]: Как управлять размером фрейма в TWebBrowser?
От: Good Man  
Дата: 05.08.02 10:48
Оценка:
Спасибо Алексей, за совет.
Я думал, что нужно получить указатель на объект IHTMLFrameElement и с ним делать какие-то манипуляции.
Все оказалось гораздо проще.

К сожалению, возникла друга проблема: если левый фрейм «contents» скрыть, то правый фрейм «mainFrame» становится полностью белым. Станица, которую он содержит, куда-то исчезает.

При повторном клике на ссылке в левом фрейме, страница в правом фрейме не загружается.
Что делать не знаю...
Best wishes, Taras
Re[3]: Как управлять размером фрейма в TWebBrowser?
От: Good Man  
Дата: 05.08.02 11:40
Оценка:
Разобрался. Вот как надо:

procedure TForm1.Button1Click(Sender: TObject);
var str: AnsiString;

begin
  if IsFrameCont then
     begin
       if MinFrame = false then
          begin
            IHTMLFrameSetElementDisp(HTMLElementCollection(HTML_Doc.All.Tags('FRAMESET')).item(1,varEmpty)).cols:='0,*';
            MinFrame := true;
          end
       else
          begin
            IHTMLFrameSetElementDisp(HTMLElementCollection(HTML_Doc.All.Tags('FRAMESET')).item(1,varEmpty)).cols:='175,*';
            MinFrame := false;
          end;
     end;
end;
Best wishes, Taras
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.