Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];

Вниз

Проблема с all.tags(string?????) ?   Найти похожие ветки 

 
Johnnnnnn   (2008-09-30 08:24) [0]

В общем пишу такой код:
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 08:54) [1]


> в чем прикол?


А нет никакого прикола - оба варианта абсолютно эквивалентны по своей логике.


 
Johnnnn   (2008-09-30 09:18) [2]

Если так то почему первый не работает?


 
Johnnnn   (2008-09-30 09:25) [3]

Обьяснб по подробнее вот ето:
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 то только в етом варианте оно работает. Вот отсюда и вопрос че за дела?


 
Сергей М. ©   (2008-09-30 09:32) [4]


> почему первый не работает?


А ты у отладчика спрашивал ?


 
Johnnnn   (2008-09-30 09:38) [5]

Хороший вопрос счас попробую чето зделать


 
Vlad Oshin ©   (2008-09-30 09:40) [6]

Через 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:48) [7]

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.


 
Сергей М. ©   (2008-09-30 09:52) [8]


> он тут как вы знаете не при делах


Да ты что ?! А мужики-то и не знают)


 
Сергей М. ©   (2008-09-30 09:54) [9]


> если запросить без try except


> то выдает Access violation


Значит верь глазам своим - элемент-тэг с именем tagnamee в коллекции tags не существует.


 
Johnnnn   (2008-09-30 09:55) [10]

Фиг его знает часто по интернету трудно понять где человек иронизирует а где нет в реальности по оттенку голоса ето можно понять а так трудно вобщем. Поетому незнаю как на ваш ответ реагировать тут используется позднее связывание и отладчик незнает как ето проверить.


 
Johnnnn   (2008-09-30 09:57) [11]

Значит верь глазам своим - элемент-тэг с именем tagnamee в коллекции tags не существует. - видиш суслика? и я не вижу! а он есть! ЕСТЬ ТАМ INPUT!!!!!!!! яж говорю когда присваиваеш значение переменной сначала edit.text то все работает!!!!!!!!!!!!!!! ОШИБКИ В НАПИСАНИИ БЫТЬ НЕ МОЖЕТ!


 
Сергей М. ©   (2008-09-30 10:01) [12]


> отладчик незнает как ето проверить


Зато он прекрасно знает как показать фактическое значение параметра tagnamee непосредственно перед обращением к св-ву-коллекции Tags.


> ОШИБКИ В НАПИСАНИИ БЫТЬ НЕ МОЖЕТ!


Опять орать взялся ?)


 
Сергей М. ©   (2008-09-30 10:05) [13]


> тут используется позднее связывание и отладчик незнает как
> ето проверить


Можно подумать, что если бы было раннее связывание, то отладчик был бы "при делах")


 
Johnnnn   (2008-09-30 10:06) [14]

Зато он прекрасно знает как показать фактическое значение параметра tagnamee непосредственно перед обращением к св-ву-коллекции Tags. - понял счас буду пробовать както ето увидеть, если вы неподскажите как ето пошагово зделать то надеюсь поиск в гугле по - как в отладчике просмотреть значение переменной - мне поможет. Спасибо!


 
Johnnnn   (2008-09-30 10:08) [15]

Да кажется поможет


 
Johnnnn   (2008-09-30 10:11) [16]

Можно подумать, что если бы было раннее связывание, то отладчик был бы "при делах") - понимаете я ламер! поетому все вот так!


 
Сергей М. ©   (2008-09-30 10:14) [17]

Проще пареной репы - ставишь брейкпойнт

if amdoc.all.tags(tagname).item(i).name=inputname then showmessage("dfgf"); <-- здесь

ловишь его, наводишь мышиный курсор на выделенный жирным идентификатор переменной и - о чудо ! - отладчик "при делах" показывает хинт с содержимым переменной)


 
Vlad Oshin ©   (2008-09-30 10:14) [18]

да просто может интерфейс не подхватывает.. а явно если, то может подхватывает.
Почему с edit работает - загадка. Может за кулисами что инициализируется, если к контрлам обращаться,
короче, хз
Но метод с взятием интерморды работает даже с IE


 
Сергей М. ©   (2008-09-30 10:15) [19]


> я ламер!


И ты этим гордишься ?)


 
Johnnnn   (2008-09-30 10:25) [20]

И ты этим гордишься ?) - скажем так лучше понимать ето чем даже етого!!! непонимать:) за советы спасибо счас времени нет разбирать вечером с работы вернусть буду думать че с етим делать всем скорей всего воспользуюсь советом Vlad Oshin. Всем спасибо!


 
Сергей М. ©   (2008-09-30 10:27) [21]


> 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



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

Форум: "Начинающим";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.006 c
4-1199910118
=BuckLr=
2008-01-09 23:21
2008.11.09
Bidi mode средствами API


2-1222842413
abhtr
2008-10-01 10:26
2008.11.09
Как задать "масштаб" формы, учитывающий разрешение экрана?


2-1222927304
SkyN
2008-10-02 10:01
2008.11.09
PostMessage


15-1221479303
Запрос
2008-09-15 15:48
2008.11.09
Запрос, максимальная дата


4-1199736674
Compiler
2008-01-07 23:11
2008.11.09
Rect текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский