Вниз
Скачать: CL | DM;

Заполнение формы   Найти похожие ветки 

← →
BlackSun   (2002-07-28 16:33) [0]

Заполняю форму следующим образом, все работает, но хотелось бы это же самое проделать на страничке со фреймами, как бы это сделать, где указать, в каком фрейме работать?
procedure TForm1.Button1Click(Sender: TObject);
var
iDoc:IHtmlDocument2;
i:integer;
ov:OleVariant;
iDisp: IDispatch;
iElement:IHTMLElement;
iColl:IHTMLElementCollection;
iInputElement:IHTMLInputElement;
iEl:IHTMLElement;
s:string;
begin
ov:="INPUT";
WB.ControlInterface.Document.QueryInterface(IHtmlDocument2,iDoc);
IDisp:=iDoc.all.tags(ov);
if assigned(IDisp) then begin
IDisp.QueryInterface(IHTMLElementCollection,iColl);
if assigned(iColl) then begin
for i:=1 to iColl.Get_length do begin
iDisp:=iColl.item(pred(i),0);
iDisp.QueryInterface(IHTMLInputElement,iInputElement);
if assigned(iInputElement) then begin
memo1.lines.add(iinputelement.get_name);
if iInputElement.Get_name="login"
then iInputElement.Set_value("MyLogin");
if iInputElement.Get_name="pwd"
then iInputElement.Set_value("MyPassword");
if iInputElement.Get_name="submit"
then begin
iInputElement.QueryInterface(IHtmlElement,iEl);
iEl.click;
end;
end;
end;
end;
end;


end;


← →
BlackSun   (2002-07-29 08:43) [1]

Мастера, неужто никто не поможет?


← →
int64 ©   (2002-07-29 14:48) [2]

Вот функция:

function GetFrame(WB: IWebbrowser2; FrameName: string): IWebbrowser2;
var
OleContainer: IOleContainer;
enum: IEnumUnknown;
TempUnk: IUnknown;
Fetched: PLongint;
FrameNo: integer;
Coll: HTMLElementCollection;
begin
With WB do
begin
while ReadyState <> READYSTATE_COMPLETE do
Forms.Application.ProcessMessages;
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 := nil;
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;


Функция ищет фреймы по их имени. Если усложнить, будет искать во вложенных фреймах (через рекурсию). Если упростить, будет искать по номеру фрейма.

Всё, что тебе нужно, заменить строчку:
WB.ControlInterface.Document.QueryInterface(IHtmlDocument2,iDoc);
На:
GetFrame(WB.ControlInterface, "MyNameFrame").Document.QueryInterface(IHtmlDocument2,iDoc);


← →
BlackSun   (2002-07-30 20:43) [3]

Спасибо тебе, int64. Все работает!


← →
ga3 ©   (2002-08-03 03:28) [4]

а у меня ни фига не работает пишет "Undeclared identifier: IOLEContainer"
чо делать, мастер? может быть, тебя не затруднит запостить готовый кусок кода? может, это из-за того, что у меня Д6??? блин, замучился вконетс, а сделать надо через 2 недели. помоги, плиз, а то совсем плохо


← →
ga3 ©   (2002-08-03 03:29) [5]

да, еще пишет что метод EnumObjects неприменим пачимуто...


← →
demona ©   (2002-08-05 18:40) [6]

Хм.. помоему Platform SDK надо подключить



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
3-60495
Olejich
2002-07-29 12:39
2002.08.19
таблицы Access


1-60738
mmb
2002-08-07 11:41
2002.08.19
TCanvas можно ли создавать в run-time


4-60901
kidman
2002-06-12 16:12
2002.08.19
screensaver


4-60887
[BAD]Angel
2002-06-12 16:49
2002.08.19
Люди, помогите ПЛЗ!!!!


14-60845
vads
2002-07-25 08:25
2002.08.19
Срочно понадобилась процедура получения суммы прописью




   Наверх