Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Список SELECT и TWebBrowser, Почти получилось :( 
:(
    Опции темы
mrX
  Дата 16.8.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Помогите пожалуйста разобраться с кодом. Есть функция, которая Заполняет TString данными из элемента select на HTML странице. Так вот она заполняет каждую строку названием элемента, а мне нужно получить его параметр, к примеру:
<option value="10" >My string</option>
В строку записывается значение: My string
А нужно чтобы писалось значение: 10
Пробовал уже по разному, не получается. Единственное что получилось это записать значение только выделенного элемента, а как записать весь список select'а в TString?

В качестве TString у нас такой параметр:

tslLines: TStrings

Код

function IsSelectElement(eleElement: IHTMLElement): Boolean;
var
  selElement: IHTMLSelectElement;
begin
  Result := False;
  try
    selElement := eleElement as IHTMLSelectElement;
  except
    Exit;
  end;
  Result := True;
end;

procedure GetListBoxOptions(Web1: TWebBrowser;
  strListBoxName: string;
  intInstance: Integer;
  tslLines: TStrings);
var
  eleChild: IHTMLElement;
  eleElement: IHTMLElement;
  colGrandParents: IHTMLElementCollection;
  colParents: IHTMLElementCollection;
  selElement: IHTMLSelectElement;
  intCount: Integer;
  intG: Integer;
  intGMax: Integer;
  intP: Integer;
  intPMax: Integer;
  Document: IHTMLDocument2;
begin
  tslLines.Clear;
  intCount    := -1;

  //Magic declarations
  Document := Web1.Document as IHTMLDocument2;
  if Document = nil then Exit;

  colGrandParents := Document.All;
  if colGrandParents = nil then Exit;

  intGMax := colGrandParents.Length - 1;
  for intG := 0 to intGMax do
  begin
    eleElement := colGrandParents.Item(intG, '') as IHTMLElement;
    if IsSelectElement(eleElement) then
    begin
      selElement := eleElement as IHTMLSelectElement;
      if selElement.Name = strListBoxName then
      begin
        //Found a list box with the correct name.
        Inc(intCount);
        if intCount = intInstance then
        begin
          //Found the instance with the correct name.
          colParents  := eleElement.children as IHTMLElementCollection;
          intPMax  := colParents.Length - 1;
          for intP := 0 to intPMax do
          begin
            eleChild := colParents.Item(intP, '') as IHTMLElement;
            tslLines.Add(eleChild.InnerText);
          end;
        end;
      end;
    end;
  end;
end;


Код

Есть ещё одна процедурка:

procedure TForm1.BitBtn1Click(Sender: TObject);
var iDoc:IHtmlDocument2;
     i:integer;
     iDisp: IDispatch;
     iColl:IHTMLElementCollection;
     iOpt:IHTMLOptionElement;
begin 

  WebBrowser1.ControlInterface.Document.QueryInterface(IHtmlDocument2,iDoc);
  if not assigned(iDoc) then begin
    ShowMessage(' !!!??? Nothing dowloaded ... ');
    Exit;
  end;
  IDisp:=iDoc.all.tags('OPTION');
  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(IHTMLOptionElement,iOpt);
        if Assigned(iOPT) then
      begin
       begin
        Combobox1.Items.Add(iopt.value);
        Combobox2.Items.Add(iopt.text);
       end;
      end;
         end;
       end;
     end;
   end;


Она загоняет в первый комбобокс валюе всех элементов OPTION страницы, а во второй их текст.
Нужно сделать тоже самое, только не ВСЕХ элементов, а нужного мне по name.

Помогите пожалуйста!
PM MAIL   Вверх
mrX
Дата 16.8.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Вот пример HTML кода с каким нужно работать, тоесть мне нужно из кучи селектов выбрать именно с именем colors и записать в TString или в ComboBox такой список: 
1
11
10
8
7
6
5

Код

<select name="colors" id="colors" onchange="onCategoryChange(this.value)" multiple>
<option value="1" >Blue</option>
<option value="11" >Green</option>
<option value="10" >Red</option>
<option value="8" >Yellow</option>
<option value="7" >Grey</option>
<option value="6" >White</option>
<option value="5" >Black</option>
</select>


PM MAIL   Вверх
December
Дата 17.8.2006, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Дык собстна у тебя есть вся информация, осталось только её связать.
Смотрим на первый кусок кода. Когда ты нашёл именно нужный элемент страницы, проверяешь всех детей на расовую принадлежность и забираешь у правильных свойство value:
Код
for i:=0 to selElement.length-1 do
  begin
  if not Supports(selElement.item(i,0),HTMLOptionElement,optEl) then continue;
  tslLines.Add(optEl.value);
  end;//for

в var добавляется одна декларация:
Код
var
  optEl:HTMLOptionElement;

Код не проверял, но суть должна быть ясна.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
mrX
Дата 17.8.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.8.2006

Репутация: нет
Всего: нет



Спасибо большое! Все получилось!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.