18.12.2018, 17:13 [+3 UTC]
в нашей команде: 3 244 чел. | участники онлайн: 17 (рекорд: 19)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.59 (18.12.2018)

Общие новости:
18.12.2018, 00:02

Форум:
18.12.2018, 14:33

Последний вопрос:
18.12.2018, 16:31

Последний ответ:
18.12.2018, 14:01

Последняя рассылка:
18.12.2018, 12:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
15.02.2016, 12:03 »
sheiko.v97
Спасибо большое, очень помогли. Искренне благодарен. [вопрос № 188810, ответ № 273377]
03.02.2010, 18:54 »
Anjali
Спасибо за поддержку, всё в итоге получилось. [вопрос № 176428, ответ № 259124]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 830
puporev
Статус: Профессионал
Рейтинг: 82
Степанов Иван /REDDS
Статус: 4-й класс
Рейтинг: 26

Перейти к консультации №:
 

Консультация онлайн # 140907
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Oneboyfriend
Отправлена: 28.07.2008, 17:26
Поступило ответов: 1

Помогите решить задачу.
Задача в следующем:
есть веб форма с поля для заполнения и есть select такого рода:
<SELECT class=input_submit name="home"> <OPTION value=0
selected>Выбор страны</OPTION> <OPTION value=Украина(+3)>Украина (+3)</OPTION>
<OPTION value=Россия(+7)>Россия (+7)</OPTION>
<OPTION value=США(+039)>США(+039)</OPTION>
</SELECT>
Вопрос......
Как мне в combobox добавить все (OPTION value)
а при выборе в комбобоксе определенной страны, на сайте менялось тоже.

Состояние: Консультация закрыта

Ответ # 227100 от Denisss


Здравствуйте, Oneboyfriend!

Пример находится в приложении. oper - объект класса TComboBox.

Если в тексте страницы имеется не один элемент с именем (name) 'home', то придется усложнить код:
1. С помощью iDoc.all.tags('SELECT') получаете коллекцию (iColl: IHTMLElementCollection) элементов с тэгом SELECT;
2. Перебираете элементы коллекции (IHTMLSelectElement), пока не найдете элемент с именем 'home' (он и будет сохранен в переменной iSel).

Удачи!

Приложение:


Консультировал: Denisss
Дата отправки: 31.07.2008, 19:57

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 140907
неизвестный

# 1

= общий = | 28.07.2008, 17:45

P.s. использую twebbrowser

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 2

= общий = | 28.07.2008, 18:08 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Oneboyfriend
Сначала расскажите, как Ваша программа связана с сайтом, на котором должно "меняться тоже"...
И под combobox Вы имеете в виду компонент Дельфи TComboBox?

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

неизвестный

# 3

= общий = | 28.07.2008, 19:10

как связано это не важно, вы мне дайте ответ если знаете, а по поводу компонента sir Henry будте внимательны (Рассылка: / КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi)

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Denisss

# 4

= общий = | 28.07.2008, 19:40

Правильно ли я понимаю?:
Вы хотите создать форму (TForm), на которой будет размещен TComboBox. Далее Вы скачиваете web-страницу (заходите на сайт), обрабатываете ее и заполняете список значений установленного на форму TComboBox. После того, как пользователь нажмет на кнопку ОК, выбранное значение отправляется на сайт (методом Get или Post).

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

неизвестный

# 5

= общий = | 28.07.2008, 20:29

нет, через twebbrowser я открываю некую страницу, там есть поле (selelct) c выбором страны, так вот эти страны мне нужно программно поместить в combobox
вот как я делал, но у меня все береться
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var iDoc:IHtmlDocument2;
i:integer;
iDisp: IDispatch;
iColl:IHTMLElementCollection;
iOpt:IHTMLOptionElement;

begin
WebBrowser1.ControlInterface.Document.QueryInterface(IHtmlDocument2,iDoc);
IDisp:=iDoc.all.tags('OPTION'); - если пишу (option value) то пусто, как мне эти value взять
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),1);
iDisp.QueryInterface(IHTMLOptionElement,iOpt);
if Assigned(iOPT) then
begin
oper.Items.Add(iOpt.value);
end;
end;
end;
end;
end;


тоесть, в oper.itemindex должны быть города, а у меня получаеться, сначало 2 нуля и все города дублируются почемуто( тоесть, Украина, Украина,Россия,Росиия), помоги пожалуйста.
Посмотрите вопрос (весь select) , первое value =0
Вообщем мне надо (option value) поместить в combobox.item.add

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Вадим Исаев ака sir Henry
Старший модератор

ID: 425

# 6

= общий = | 29.07.2008, 05:48 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Oneboyfriend
Чтобы знать, что Вам ответить, сначала нужно понять вопрос, согласитесь? smile
К сожалению Ваша формулировка непонятна и свидетельство тому - не только я не понимаю, но и другие эксперты.
Так что Ваше замечание о невнимательности некорректно.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

неизвестный

# 7

= общий = | 29.07.2008, 13:12

и что не понятного в вопросе? это просто говоря называеться не знаем и всё, самый первый вопрос поставлен корретно, и все понятно там что и для чего

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Denisss

# 8

= общий = | 29.07.2008, 20:15

Странно, но Ваш код у меня нормально работает. Поэтому могу предположить, что проблема в самом HTML файле (странице).
Попробуйте заменить код вот на такой:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
var
  iDoc: IHtmlDocument2;
  i, j: integer;
  iDisp: IDispatch;
  iColl: IHTMLElementCollection;
  iSel: IHTMLSelectElement;
  iOpt: IHTMLOptionElement;
  hr: HRESULT;

begin
  oper.clear;

  hr:= WebBrowser1.ControlInterface.Document.QueryInterface(IHtmlDocument2,
    iDoc);

  if Failed(hr) then
    Exit;

  iDisp:= iDoc.all.tags('SELECT');

  if not assigned(iDisp) then
    Exit;

  hr:= iDisp.QueryInterface(IHTMLElementCollection, iColl);

  if Failed(hr) then
    Exit;

  for i:= 1 to iColl.length do
  begin
    iDisp:= iColl.item(Pred(i), Pred(i));
    hr:= iDisp.QueryInterface(IHTMLSelectElement, iSel);

    if (not Failed(hr)) and (iSel.name = 'home') then
    begin
      for j:= 1 to iSel.length do
      begin
        iDisp:= iSel.item(Pred(j), Pred(j));
        hr:= iDisp.QueryInterface(IHTMLOptionElement, iOpt);

        if not Failed(hr) then
          oper.Items.Add(iOpt.value);
      end;

      Break;
    end;
  end;
end;

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

неизвестный

# 9

= общий = | 30.07.2008, 12:51

Спасибо Denisss но всеровно таже проблема все странны дублируются, а (oper.clear - не доступна операция).
Denisss посмотрите пожалуйста самы первый вопрос на форму select там первый (optionvalue =0) от тоже добавляется в combobox и тоже дублируется, а вместо 0 должно быть (Выбор страны)
Denisss может проблема в том, что идет два одинаковых имени( <OPTION value=Украина(+3)>Украина (+3)</OPTION>) поэтому и дублируется. Если смотреть как Html страницу то получаеться


Метка элемента Значение

Выбор страны 0
Украина Украина
Россия Россия
Получаеться мне надо (Метка элемента), а у меня в combobox и (метка) и (значение) заноситься.
Denisss пожалуйста разберитесь, потому что я пока в таких делах слаб, а очень нужно это сделать, это единственная проблема моя, с input, textarea,submit я разобрался.
Заранее благодарень за помощь и ответы

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

Denisss

# 10

= общий = | 30.07.2008, 18:57

© Цитата:
oper.clear - не доступна операция

Странно, вроде это стандартный метод класса TComboBox. Вместо нее можно использовать:
oper.Items.Clear;


Также рекомендую Вам внимательнее просмотреть обработчики событий используемого компонента TWebBrowser - возможно Вы где-то еще делаете обработку, что добавляет дубликаты в список.

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

неизвестный

# 11

= общий = | 30.07.2008, 23:30

Denisss спасибо большое, когда oper.item.clear то все нормально не дублируеться но (0) всеровно вместо Выбор города, да не важно это, спасибо.
Помоги организовать вот такую функцию:
oper.itemindex:=iOpt.value; - я так понял здесь нужно организовать не (value) а (selected)? но как я не знаю.
писал так iopt.selected:=oper.itemindex; - пишет Incompatible type String
тоесть то что мы сделали надо наоборот, чтобы при выборе в combobox выбиралось и на сайте в select

=====
Я только в одном глубоко убеждён - не надо иметь убеждений! :)

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14574 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.59 от 18.12.2018