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-объект не поддерживает данное свойство.
Подскажите, как быть?
Здравствуйте 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;
Спасибо Алексей, за совет.
Я думал, что нужно получить указатель на объект IHTMLFrameElement и с ним делать какие-то манипуляции.
Все оказалось гораздо проще.
К сожалению, возникла друга проблема: если левый фрейм «contents» скрыть, то правый фрейм «mainFrame» становится полностью белым. Станица, которую он содержит, куда-то исчезает.
При повторном клике на ссылке в левом фрейме, страница в правом фрейме не загружается.
Что делать не знаю...
Разобрался. Вот как надо:
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;