Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему не заполняется SELECT? ошибка в коде 
:(
    Опции темы
Yuran89
Дата 25.5.2010, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
На этом сайте: IDKNET.COMесть поле SELECT. Я пытаюсь его программно заполнить.Только вот чето не получается.
Я загружаю его в CppWebBrowser и далее вот мой код:
Код

IHTMLDocument2 *htm = 0;
    WB->Document->QueryInterface(&htm);
    if(htm)
    {
        IHTMLElementCollection *col = 0;
        htm->get_all(&col);
        if(col)
        {
            IDispatch *el_disp = 0;
            col->item(TVariant(L"prefix"), TVariant(0), &el_disp);   // Здесь указывается имя тега ("prefix") с которым мы работаем
            if(el_disp)
            {
                IHTMLElement *el = 0;
                el_disp->QueryInterface(&el);
                if(el)
                {
                    el->setAttribute(L"value", TVariant(L"2"),0); // Здесь переменной "value" присваиваем значение "2"


                    el->Release();
                    el = 0;
                }
                el_disp->Release();
                el_disp = 0;
            }
            col->Release();
            col = 0;
        }
        htm->Release();
        htm = 0;
    }


Этот код я нашел в инернете. При компиляции все идет нормально а когда пытаюсь заполнить SELECT в ходе работы программы то он просто очищает это поле и не записывает в него ничего.
Как мне сделать так чтоб он записывал туда те варианты что на сайте?

WB это CppWebBrowser.
PM MAIL WWW   Вверх
Platov
Дата 26.5.2010, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



может вот так заработает:
Код

if(WB->Document )
    {
        TComInterface<IHTMLDocument2> pDocument;
        WB->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pDocument);

        if( pDocument )
        {
            TComInterface<IHTMLElementCollection> pCollection;

            pDocument->get_all(&pCollection);

            if( pCollection )
            {
               TComInterface<IDispatch> pDisp;
                pCollection->item(TVariant("prefix"), TVariant(0), &pDisp);
                if( pDisp )
                {
                    TComInterface<IHTMLElement3> pElementI;
                    pDisp->QueryInterface(__uuidof(IHTMLElement3), (LPVOID*)&pElementI);

                    TComInterface<IHTMLElement> pElement;
                    pDisp->QueryInterface(IID_IHTMLElement, (LPVOID*)&pElement);
                    if( pElement )
                    {
                        pElement->setAttribute(TVariant("value"),TVariant("2"));
                        pElementI->fireEvent(TVariant("OnKeyUp"),TVariant("OnKeyUp"),NULL);
                    }
                }


            }
        }
    }


pElementI->fireEvent(TVariant("OnKeyUp"),TVariant("OnKeyUp"),NULL) -  надо было чтобы отработал скрипт висевший на "OnKeyUp"
PM MAIL   Вверх
Yuran89
Дата 26.5.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за код, но здесь какие-то проблеммы у меня с TComInterface<IHTMLElement3> pElementI;
Выдает ошибку мол Undefined symbol 'IHTMLElement3'

и далее не знает что такое pElementI

Я так понимаю, его нет в Mshtml.h? Что мне тогд аеще надо подключить? Или я не прав...

Это сообщение отредактировал(а) Yuran89 - 26.5.2010, 23:45
PM MAIL WWW   Вверх
Platov
Дата 27.5.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



У меня были ещё такие библиотеки подключены:

mshtmhst.h
mshtmcid.h
SHDocVw_OCX.h

PM MAIL   Вверх
Yuran89
Дата 27.5.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



блин... то же самое ...
в чем может быть проблемма?
PM MAIL WWW   Вверх
Platov
Дата 28.5.2010, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



IHTMLElement3 живёт в mshtml.h.

Никаких либов подключать не надо. Должно работать.
PM MAIL   Вверх
Yuran89
Дата 28.5.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Должно работать, а оно вот как получается ..:user posted image

PM MAIL WWW   Вверх
Yuran89
Дата 28.5.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я разобрался, вернее мне помогли разобраться..
Вот мой первый код уже исправленный:
Код

IHTMLDocument2 *htm = 0;
    WB->Document->QueryInterface(&htm);
    if(htm)
    {
        IHTMLElementCollection *col = 0;
        htm->get_all(&col);
        if(col)
        {
            IDispatch *el_disp = 0;
            col->item(TVariant(L"prefix"), TVariant(0), &el_disp);  
            if(el_disp)
            {
                IHTMLSelectElement *el = 0; 
                el_disp->QueryInterface(&el);
                if(el)
                {
                    el->put_selectedIndex( 2 ); //  778
                    el->Release();
                    el = 0;
                }
                el_disp->Release();
                el_disp = 0;
            }
            col->Release();
            col = 0;
        }
        htm->Release();
        htm = 0;
    }


Работает отлично!

Это сообщение отредактировал(а) Yuran89 - 28.5.2010, 15:53
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




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


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

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