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

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

Frames в WebBrowser [D5, WinXP]


R@nger ©   (2003-03-15 10:42:00) 

Здравствуйте! Очень нужна помощь. Как в TWebBrowser обратиться к фреймам? Там есть такое свойство frames возвращает коллекцию фреймов. У этой коллекции есть метод item, который по идее должен возвращать отдельный фрейм. Так вот: какой тип должен быть у фрейма??
Буду благодарен за маленький примерчик.

Еще на MSDN нашел это:

// Assume pWin is a valid IHTMLWindow interface pointer for the main window

VARIANT frameRequested;
VARIANT frameOut;
IHTMLFramesCollection2* pFramesCol;
IHTMLWindow2* pRightFrameWindow;
IHTMLDocument2* pRightDoc;

frameRequested.vt = VT_BSTR;
frameRequested.bstrVal = L"rightframe";

hr = pWin->get_frames(&pFramesCol);
hr = pFramesCol->item(&frameRequested, &frameOut);

hr = frameOut.pdispVal->QueryInterface(IID_IHTMLWindow2, (void**)&pRightFrameWindow);
hr = pRightFrameWindow->get_document(&pRightDoc);

Кто в C разбирается мож переведете на Паскаль?
Заранее благодарен.


Джек   (2003-03-17 14:09:00) [1]

Спасибо за нужную функцию.
Но есть такая проблема.
Как определить, что нужный фрейм (по индексу) загружен?
Чтобы не ждать полной загрузки всего документа.


ga3   (2003-03-15 15:57:00) [2]

uses activex, mshtml_tlb;
......
...
function GetFrame(WB: IWebbrowser2; FrameName: string): IWebbrowser2;
var
OleContainer: IOleContainer;
enum: IEnumUnknown;
TempUnk: IUnknown;
Fetched: system.PLongint;
FrameNo: integer;
Coll: HTMLElementCollection;
begin
With WB do
begin
if Assigned(document) then
begin
Coll:=HTMLElementCollection(HTMLDocument(Document).All.Tags("FRAME"));
for FrameNo:=0 to Coll.length-1 do
if HTMLFrameElement(Coll.item(FrameNo,varEmpty)).name=FrameName then break;
Fetched := 0;
OleContainer := Document as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
Enum.Skip(FrameNo);
Enum.Next(1, TempUnk, Fetched);
Result := TempUnk as IWebbrowser2;
end else Result := nil;
end;
end;

потом работаешь с результатом этой функции как с обычным WebBrowser


Наверх

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