Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];
ВнизЗаполнение формы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c