Текущий архив: 2003.11.13;
Скачать: CL | DM;
ВнизУправлени Explorer Найти похожие ветки
← →
Sesh (2003-08-31 23:20) [0]Мастера, подскажите, в эксплорере есть эдит, как мне в этот эдит занести текст?
← →
KosilkA (2003-08-31 23:54) [1]http://delphimaster.net/view/4-1062140243/
← →
Sesh (2003-08-31 23:59) [2]Там непонятно что ....
← →
KosilkA (2003-09-01 00:54) [3]странно а у меня работает))
← →
Sesh (2003-09-01 23:11) [4]Да, я тоже попробовал, заработало, но ищет только в 1-ом фрейме, а вот как задат ему фрейм в котором искать?
← →
Sesh (2003-09-01 23:14) [5]Писал Opuhshii © Следующее:
(29.08.03 23:24) [5]
"как мне найти открытый Internet Explorer "
IShellWindows - спасет отца русской демократии,..
"в input занести текст"
на то у IWebBrowser2 есть Document, тот что IHTMLDocument2,
структура самого HTML вам знакома?,. вот и хорошо,..
читайте о IHTML**** и в частности о IHTMLInputElement
а вот и пример к выше написаному бреду,. .)))
procedure TForm1.Button1Click(Sender: TObject);
var
SW:Variant;
WB:Variant;
Doc:Variant;
Inputs:Variant;
I,J:Integer;
begin
SW:=CoShellWindows.Create;
for I:=0 to SW.Count-1 do begin
WB:=SW.Item(I);
try
Doc:=WB.Document;
Inputs:=Doc.all.tags("INPUT");
for J:=0 to Inputs.Length-1 do begin
Inputs.item(J).value:="Hello World";
end;
except
// что-то не то.. много вариантов что может быть не то,. :)
end;
end;
end;
в данном примере,
SW - IShellWindows
WB - IWebBrowser2
Doc - IHTMLDocument2
Inputs - IHTMLElementCollection
где каждый item - IHTMLInputElement,...
да,.. в uses добавить: SHDocVw и MSHTML. и не просто дабывить, а изучить!
Как задат ему фрейм в котором происходит вставка Hello Word??? Может кто знает?
← →
Opuhshii (2003-09-02 11:22) [6]знает конечно,..
посмотри IHTMLDocument2
← →
int64 (2003-09-02 12:07) [7]Sesh © (01.09.03 23:11) [4]
> а вот как задат ему фрейм в котором искать?
Вот функция, через которую можно получить доступ к фрейму документа как к IWebBrowser2:
function GetFrame(Document: IHTMLDocument2; FrameNo: Integer): IWebbrowser2;
var
OleContainer: IOleContainer;
enum: IEnumUnknown;
unk: IUnknown;
Fetched: PLongint;
begin
// while ReadyState <> READYSTATE_COMPLETE do
// Forms.Application.ProcessMessages;
if Assigned(Document) then
begin
Fetched := nil;
OleContainer := Document as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
Enum.Skip(FrameNo);
Enum.Next(1, Unk, Fetched);
Result := Unk as IWebbrowser2;
end else Result := nil;
end;
← →
Sesh (2003-09-02 22:52) [8]Ребят, тяжело жить бестолковым, как мне теперь объединиь эти функции, получается несовместимость типов, а если я в -ой ставлю что Doc - IHTMLDocument2 то в других вещях проблема, 2 дня уже мучаюсь и не домучаю, как это сделать?
Или может есть примеры на эту тему, киньте на sesh@ua.fm
Спасибо.
← →
int64 (2003-09-03 04:26) [9]Объявляй функцию так:
function GetFrame(Document: IDispatch; FrameNo: Integer): IWebbrowser2;
Юзай так:
while My_IWebbrowser2.ReadyState <> READYSTATE_COMPLETE do
Forms.Application.ProcessMessages;
New_My_IWebbrowser2:= GetFrame(My_IWebbrowser2.Document, 0);
Это как один из вариантов достуа к фрейму.
Можно "достучаться" через IHTMLWindow2 или через Variant-ы.
> Или может есть примеры на эту тему, киньте на sesh@ua.fm
Пол инета есть примеров.
Ты лучше покажи, что ты делаешь.
← →
Sesh (2003-09-03 08:55) [10]int64 (03.09.03 04:26) [9]
>Ты лучше покажи, что ты делаешь.
На работе есть 3 проги, в них заносят одни и те же данные о клиентах, но выполдняют разные функции, программы сносить нельзя, да и новую вместо тех тож, ну я и решил чтоб наши экономисты не набирали 3 раза одно и то же примочку написать...
← →
KosilkA (2003-09-03 14:08) [11]посмотри в блокноте каким именем назван нужный тебе input (input type="text" name=" login" или чтото типа этого) , а дальше примерно так :
if Inputs.item(J).name:="login" then Inputs.item(J).value:="Василий Пукин"
у каждого обьекта в хтмл-форме есть своё имя , и есть также свойства и события , как и в дельфях .. кусок программы управляющий обьектом input у тебя уже есть ....ничего сложного))))
← →
Sesh On Work (2003-09-03 14:55) [12]Да, оно-то все получилось, даже если не брать по имени, а по № инпута, но проблема с фреймом так и не решилась, оно все делает только в 1-ом фрейме, а в форме из 3 и вот надо перейти в 3-й, int64 дал пример про фрейм, но связать 2 части Opuhshii и int64 не получается, типы разные. Может знаешь как в примере, написанном Opuhshii (через варианты) достучаться до нужного фрейма?
← →
Ihor Osov'yak (2003-09-04 01:54) [13]2 Sesh On Work
unit fIEFrames;
interface
uses Mshtml;
type
TOneStepSearchCondForHtmlDocWithFrames = function (iDoc:IHtmlDocument2; addPrm:integer):boolean;
function FinderFirstCondForHtmlDocWithFrames(iDoc: IHtmlDocument2;
addPrm: integer;
aDoer: TOneStepSearchCondForHtmlDocWithFrames): boolean;
function FinderLastCondForHtmlDocWithFrames(iDoc: IHtmlDocument2;
addPrm: integer;
aDoer: TOneStepSearchCondForHtmlDocWithFrames): boolean;
implementation
uses sysutils;
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 FinderLastCondForHtmlDocWithFrames(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 := frames.length downto 1 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 := FinderLastCondForHtmlDocWithFrames(IWindow2.document,addPrm,aDoer);
except
end;
if result then exit;
end;
except
{ ShowMessage("Find error !!!");}
end;
end;
end;
end.
Зы - но если фрейм с другого сайта - то такой переход по соображениям безопасности заблокирован.. Как его обойти, есть несколько способов, но это пока на уровне идеи, практически пока необходимость в реализации не возникала..
Страницы: 1 вся ветка
Текущий архив: 2003.11.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.054 c