![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с all.tags(string?????) ?
Johnnnnnn © (2008-09-30 08:24:00)В общем пишу такой код:
procedure lpc(inputname:string; tagname:string);
var
i:integer;
begin
amdoc:=form1.webbrowser2.Document as IHtmlDocument2;
for i:=0 to amdoc.all.tags(tagname).length-1 do begin
try
if amdoc.all.tags(tagname).item(i).name=inputname then showmessage('dfgf');
except
end;
end;
end;
procedure TForm1.WebBrowser2DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
lpc('q', 'INPUT');
end;
ну и потом можно браузером navigate на www.google.com должно появиться сообщение НО! его НЕТ! ок тогда пробуем так
procedure lpc(inputname:string; tagname:string);
var
i:integer;
begin
Edit1.text:=tagname;
amdoc:=form1.webbrowser2.Document as IHtmlDocument2;
for i:=0 to amdoc.all.tags(edit1.text).length-1 do begin
try
if amdoc.all.tags(edit1.text).item(i).name=inputname then showmessage('dfgf');
except
end;
end;
end;
идем к гуглу сообщение ЕСТЬ! че за беда такая мне впринципе пофиг могу и эдит на форму кинуть но понять просто хочу в чем прикол?
Сергей М. (2008-09-30 10:27:00) [1]
> Johnnnn (30.09.08 10:25) [20]
http://www.google.ru/search?complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla:ru:official&hs=WNt&defl=ru&q=define:%D0%9B%D0%B0%D0%BC%D0%B5%D1%80&sa=X&oi=glossary_definition&ct=title
Johnnnn (2008-09-30 10:25:00) [2]И ты этим гордишься ?) - скажем так лучше понимать ето чем даже етого!!! непонимать:) за советы спасибо счас времени нет разбирать вечером с работы вернусть буду думать че с етим делать всем скорей всего воспользуюсь советом Vlad Oshin. Всем спасибо!
Сергей М. (2008-09-30 10:15:00) [3]
> я ламер!
И ты этим гордишься ?)
Vlad Oshin (2008-09-30 10:14:00) [4]да просто может интерфейс не подхватывает.. а явно если, то может подхватывает.
Почему с edit работает - загадка. Может за кулисами что инициализируется, если к контрлам обращаться,
короче, хз
Но метод с взятием интерморды работает даже с IE
Сергей М. (2008-09-30 10:14:00) [5]Проще пареной репы - ставишь брейкпойнт
if amdoc.all.tags( tagname).item(i).name=inputname then showmessage('dfgf');<-- здесь
ловишь его, наводишь мышиный курсор на выделенный жирным идентификатор переменной и - о чудо ! - отладчик "при делах" показывает хинт с содержимым переменной)
Johnnnn (2008-09-30 10:11:00) [6]Можно подумать, что если бы было раннее связывание, то отладчик был бы "при делах") - понимаете я ламер! поетому все вот так!
Johnnnn (2008-09-30 10:08:00) [7]Да кажется поможет
Johnnnn (2008-09-30 10:06:00) [8]Зато он прекрасно знает как показать фактическое значение параметра tagnamee непосредственно перед обращением к св-ву-коллекции Tags. - понял счас буду пробовать както ето увидеть, если вы неподскажите как ето пошагово зделать то надеюсь поиск в гугле по - как в отладчике просмотреть значение переменной - мне поможет. Спасибо!
Сергей М. (2008-09-30 10:05:00) [9]
> тут используется позднее связывание и отладчик незнает как
> ето проверить
Можно подумать, что если бы было раннее связывание, то отладчик был бы "при делах")
Сергей М. (2008-09-30 10:01:00) [10]
> отладчик незнает как ето проверить
Зато он прекрасно знает как показать фактическое значение параметра tagnamee непосредственно передобращением к св-ву-коллекции Tags.
> ОШИБКИ В НАПИСАНИИ БЫТЬ НЕ МОЖЕТ!
Опять орать взялся ?)
Johnnnn (2008-09-30 09:57:00) [11]Значит верь глазам своим - элемент-тэг с именем tagnamee в коллекции tags не существует. - видиш суслика? и я не вижу! а он есть! ЕСТЬ ТАМ INPUT!!!!!!!! яж говорю когда присваиваеш значение переменной сначала edit.text то все работает!!!!!!!!!!!!!!! ОШИБКИ В НАПИСАНИИ БЫТЬ НЕ МОЖЕТ!
Johnnnn (2008-09-30 09:55:00) [12]Фиг его знает часто по интернету трудно понять где человек иронизирует а где нет в реальности по оттенку голоса ето можно понять а так трудно вобщем. Поетому незнаю как на ваш ответ реагировать тут используется позднее связывание и отладчик незнает как ето проверить.
Сергей М. (2008-09-30 09:54:00) [13]
> если запросить без try except
> то выдает Access violation
Значит верь глазам своим - элемент-тэг с именем tagnamee в коллекции tags не существует.
Сергей М. (2008-09-30 09:52:00) [14]
> он тут как вы знаете не при делах
Да ты что ?! А мужики-то и не знают)
Johnnnn (2008-09-30 09:48:00) [15]Vlad Oshin - Спасибо!!!!!!!
По поводу отладчика он тут как вы знаете не при делах но если запросить без try except end vot tak
for i:=0 to amdoc.all.tags('input').length-1 do begin
if amdoc.all.tags(tagnamee).item(i).name=itemname then showmessage('dfgf');
end;
то выдает Access violation at address 004579E3 in module 'Project.exe'. Read of address 00000000.
Vlad Oshin (2008-09-30 09:40:00) [16]Через QueryInterface лучше писать
procedure lpc2(inputname:string; tagname:string);
var
i:integer;
Coll : IHTMLElementCollection;
amdoc:IHtmlDocument2;
begin
if form1.WebBrowser1.Document.QueryInterface(IhtmlDocument2, amDoc)= S_OK then
begin
amdoc.all.tags(tagname).QueryInterface(IHTMLElementCollection,coll);
for i:=0 to Coll.length-1 do
if (HTMLInputElement(Coll.item(i,varEmpty)).name=inputname) then
HTMLInputElement(Coll.item(i,varEmpty)).value:='Found!!!';
end;
end;
Johnnnn (2008-09-30 09:38:00) [17]Хороший вопрос счас попробую чето зделать
Сергей М. (2008-09-30 09:32:00) [18]
> почему первый не работает?
А ты у отладчика спрашивал ?
Johnnnn (2008-09-30 09:25:00) [19]Обьяснб по подробнее вот ето:
procedure lpc(inputname:string; tagname:string);
var
i:integer;
begin
amdoc:=form1.webbrowser2.Document as IHtmlDocument2;
for i:=0 to amdoc.all.tags(tagname).length-1 do begin
try
if amdoc.all.tags(tagname).item(i).name=inputname then showmessage('dfgf');
except
end;
end;
end;
процедура которая вызывается по событию браузера когда документ загрузился. Ета процедура дожна показывать сообщение когда находит таг - tagname к примеру input с именем - inputname к примеру имя будает 'q' (такое имя у поля поиска на сайте гугла) дак вот когда в ету процедуру я пытаюсь передать значение в переменной inputname напрямую то так почемуто не получается а когда сначала edit1.text присваиваю edit1.text:=tagname; а потом уже сравниваю amdoc.all.tags(edit1.text !!!!!!!!!).item(i).name=inputname то только в етом варианте оно работает. Вот отсюда и вопрос че за дела?
Johnnnn (2008-09-30 09:18:00) [20]Если так то почему первый не работает?