Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.19;
Скачать: 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 вся ветка

Текущий архив: 2002.08.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-60584
billybons
2002-08-08 07:50
2002.08.19
как программно запретить переключение между страницами PageContro


1-60563
kronprince
2002-08-07 17:27
2002.08.19
Дружественный класс


1-60678
X-jedy
2002-08-06 12:20
2002.08.19
Использование TStringList


1-60742
SergeySA
2002-08-07 14:13
2002.08.19
как послать всем окнам сообщение , чтоб перерисовались ?


1-60725
гвоздь
2002-08-07 02:09
2002.08.19
как это сделать......