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

Вниз

TWebBrowser - как узнать содержимое формы   Найти похожие ветки 

 
ZED   (2002-05-30 00:33) [0]

Уважаемые Мастера! Пишу программу, использующую компонент TWebBrowser для просмотра html в offline. На html есть форма с checkbox"ами и кнопка "Ответ". Как узнать в программе, что именно отметил user? Понимаю, что-то нужно прописать в свойстве onBeforeNavigate2.


 
int64   (2002-05-30 07:23) [1]

Вот код. В стринг через пробел записывает значения checkbox"ов, если они отмечены, и если их имена "checkbox_group1".

procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var
Coll : HTMLElementCollection;
Doc: HTMLDocument;
i: integer;
s: string;
begin
s:= "";
Doc:= HTMLDocument(WebBrowser1.Document);
if assigned(Doc) then
begin
Coll:=HTMLElementCollection(Doc.All.Tags("INPUT"));
for i:=0 to Coll.length-1 do
with HTMLInputElement(Coll.item(i,varEmpty)) do
if checked and
(type_="checkbox") and
(name="checkbox_group1"){имя элемента INPUT}
then
s:= s + " " + value;
end;
Caption:= s;
end;


ps. Если чё непонятно, интересуйся.


 
ZED   (2002-05-31 01:44) [2]

Огромное спасибо!

Пара вопросов:
1. Coll : HTMLElementCollection; //Что за тип?
2. with HTMLInputElement(Coll.item(i,varEmpty)) // Что откуда берется?

Сам тоже не сидел сложа руки и вот как решение вопроса получилось у меня:

procedure TFormBrowser.WebBrowser1BeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
var
I, J : Integer;
FormItem: Variant;
FieldName, CheckBox : array[0..NumOfValue-1] of String;

//no form on document
if WebBrowser1.OleObject.Document.all.tags("FORM").Length = 0 then
begin
Exit;
end;
//count forms on document
for I := 0 to WebBrowser1.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser1.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
//when the fieldname is found, try to read
FieldName[j]:=FormItem.Item(j).Name;
CheckBox[j]:=FormItem.Item(j).Checked;
except
Exit;
end;
end;
end;



В данном случае значение value меня мало интересует - мне нужно знать номер checkbox"a на форме (четкий порядок расположения). Можно также записать в цикле

Value[j]:=FormItem.Item(j).Value; // И узнаем значение Value

P.S. В моем случае определяются имена не только checkbox"ов, но и других элементов (Button и т.п.).

Еще раз спасибо!



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

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

Наверх





Память: 0.45 MB
Время: 0.007 c
1-35254
Freeze
2002-07-31 08:36
2002.08.12
Как программно отобразить рабочий стол как Web страницу


4-35521
tretmike
2002-06-05 12:35
2002.08.12
Как удалить только одну из кнопок Minimize/Restore из заголовка


4-35530
rdm
2002-06-04 12:43
2002.08.12
Закрыть игру


4-35497
HrUsT
2002-06-04 20:47
2002.08.12
SHFileOperation


14-35406
Malder
2002-07-13 13:04
2002.08.12
CIAcomander





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский