Форум: "Сети";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Внизможет быть кто-нибудь сможет ответить....... Найти похожие ветки
← →
Николай Быков (2003-01-18 21:45) [0]вот есть Browser типа TWebBrowser.
в него загружена страничка с фреймами (имя одного из них = main)
во фрейме main есть кнопка с именем combats.
Вопрос: Как сделать клик на ней?
Я писал:
Browser.OleDocument.document.frames["main"].forms[0].combats.click;
-
Browser.OleObject.document.frames["main"].combats.click;
-
еще были какие-то варианты + то же самое, но вместо "[" были "("
← →
Ihor Osov'yak (2003-01-18 22:50) [1]
Это (GetInput) немножко не то, о чем ты просишь - так, более общий случай - но на основании этого можешь сделать то, что тебе надо. Сия вещь рекурсивно проходится по всем фреймам, до встречи перврго инпут элемента с соотв. именем и возвращает на него интерфейс, для которого ты возовешь клик.
function fGetInputOneFrame(iDoc:IHtmlDocument2; addPrm:integer):boolean;
//(pDisp: IDispatch; const subStr:string):IHtmlElement;
var
ov:OleVariant;
iDisp: IDispatch;
iColl:IHTMLElementCollection;
iInp:IHTMLInputElement;
i:integer;
name:string;
begin
result := false;
if addPrm=0 then Exit;
if not assigned(iDoc) then Exit;
name := lowercase(pdataFor_fGetLinkOneFrame(addPrm)^.pStr^);
ov := "INPUT";
IDisp:=iDoc.all.tags(ov);
if not assigned(IDisp) then exit;
IDisp.QueryInterface(IHTMLElementCollection,iColl);
if not assigned(iColl) then exit;
for i:=1 to iColl.Get_length do begin
iDisp:=iColl.item(pred(i),0);
if not assigned(iDisp) then continue;
iDisp.QueryInterface(IHTMLInputElement,iInp);
if not assigned(iInp) then continue;
if (name= lowercase(iInp.Get_Name)) then begin
result := true;
pdataFor_fGetLinkOneFrame(addPrm)^.iElem := iInp as IHtmlElement;
Exit;
end;
end;
end;
function FinderFirstCondForHtmlDocWithFrames(iDoc:IHtmlDocument2;
addPrm:integer;
aDoer:TOneStepSearchCondForHtmlDocWithFrames):boolean;
{ The procedure aDoer will be caused for each IHtmlDocument2, beginning
from main and finishing any level of frames
while aDoer will return false;
}
var frames:IHTMLFramesCollection2;
i:integer;
ov1:OleVariant;
iDisp:IDispatch;
IWindow2:IHTMLWindow2;
begin
result := false;
if not assigned(aDoer) then Exit;
result:=aDoer(iDoc,addPrm);
if result then Exit;
frames:=iDoc.frames;
if not assigned(frames) then exit;
if frames.length=0 then exit;
for i:=1 to frames.length do begin
ov1:=i-1;
try
iDisp:=frames.item(ov1);
iDisp.QueryInterface(IHTMLWindow2,IWindow2);
if assigned(IWindow2)
then begin
result := false;
try
if assigned(IWindow2.document)
then
result := FinderFirstCondForHtmlDocWithFrames(IWindow2.document,addPrm,aDoer);
except
end;
if result then exit;
end;
except
{ ShowMessage("Find error !!!");}
end;
end;
end;
function GetInput(pDisp: IDispatch; const name:string):IHtmlElement;
var iDoc:IHtmlDocument2;
var data:dataFor_fGetLinkOneFrame;
begin
result := nil;
iDoc:=(pDisp as IWebBrowser2).Document as IHtmlDocument2;
if not assigned(iDoc) then Exit;
fillChar(data,sizeof(data),0);
data.pStr := @name;
if FinderFirstCondForHtmlDocWithFrames(iDoc,integer(@Data),fGetInputOneFrame)
then begin
result := data.iElem;
data.iElem := nil;
end;
data.pStr := nil;
end;
← →
Николай Быков (2003-01-18 22:50) [2]up
P.S.
Это не по сетям вопрос
← →
Ihor Osov'yak (2003-01-18 22:54) [3]2 Николай Быков © (18.01.03 22:50)
А ты внимательно описание рубрик почитай. Все, что связано с сетями. Интернет поже сеть.
А если о ловли рыбки спросить захочешь - то вероятно сюда тоже. Ибо рыбку сетями поже ловят :-)
← →
Николай Быков (2003-01-18 22:54) [4]
> Ihor Osov"yak © (18.01.03 22:50)
Поделитесь ссылочками на темы "IDispatch" "OleVariant" "Variant" "IHTMLDocument" "IHTMLElementCollection" "IHTMLInput" ?
← →
Николай Быков (2003-01-18 22:55) [5]
> Ihor Osov"yak © (18.01.03 22:54)
:)))
> Николай Быков © (18.01.03 22:54)
А еще на "^"
← →
Ihor Osov'yak (2003-01-18 22:57) [6]msdn
можешь также для начала http://delphi.vitpc.com/mastering/tweb.htm
← →
Николай Быков (2003-01-18 23:01) [7]
> Ihor Osov"yak © (18.01.03 22:57)
MSDN у меня тоже есть вместе с MSVS.NET, только толку от нее мало для меня (он есть, но мало). ИМХО в MSDN очень сложно найти то, что мне вот сейчас надо. (до форума я смотрел в MSDN+Delphi Help+Спаровчник по JavaScript+Rambler)
сейчас статью пойду читать
← →
M_a_x (2003-01-18 23:49) [8]WebBrowser1.OleObject.document.frames.item(0).document.all.combats.click()
Просто для того что-бы обраться к n-оиу фрейму нужно написать не frames[n], a frames.items(n).. Тоже самое: не documane.all(n), а document.all.items(n)
P.S. Кстати.. а что за программу ты пишешь? :)
← →
Николай Быков (2003-01-19 04:55) [9]
> M_a_x (18.01.03 23:49)
В прошлый раз, когда сказал, всем не понравилось (очень много было постов, которые "Удалено модератором")
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.03.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c