C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблема с IHTMLInputElement, ...а именно с radio button
Aptem
Отправлено: 30.01.2005, 18:32


Мастер участка

Группа: Участник
Сообщений: 349



Привет, Всем!

У меня такая проблема. Загружена страница с формой в TCppWebBrowser. Программно подставляю текст в поля, и меняю состояние radio button, однако если я делаю это программно (состояние radio button) после нажатия кнопки submit форма не понимает, что я выбрал другое состояние для radio.

Например, есть два radio, одно из них отмечено, нужно отметить другое, я делаю так
CODE
IHTMLInputElement *pInput -> put_checked ( 1 );
и нажимаю кнопку submit, однако форма думает, что по-прежнему стоит первое radio!

Что делать? Как решить эту проблему "непонимания"?

Спасибо за внимание.
GIZMO
Отправлено: 03.02.2005, 14:59


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Aptem @ 30/01/2005, 19:34)
я делаю так
CODE
IHTMLInputElement *pInput -> put_checked ( 1 );

А ты точно так делаешь как написал? Ведь это просто указатель на интерфейс, а инициализировать? Приведи весь код.
Aptem
Отправлено: 05.02.2005, 09:12


Мастер участка

Группа: Участник
Сообщений: 349



CODE
void __fastcall TForm1::PutDataIntoForm ( WideString UserID, WideString Password, TCppWebBrowser *WebBrowser )
{
 IHTMLDocument2 *pHTMLDocument = NULL;

 if ( SUCCEEDED ( WebBrowser -> Document -> QueryInterface ( IID_IHTMLDocument2, ( LPVOID* )&pHTMLDocument ) ) )
 {
   if ( pHTMLDocument != NULL )
   {
     IHTMLElementCollection *pAll = NULL;

     if ( SUCCEEDED ( pHTMLDocument -> get_all ( &pAll ) ) && pAll )
     {
       TVariant vName1 = "txtLogin", vName2 = "txtPwd", vName3 = "chkSeller", vName4 = "chkBuyer";
       TVariant vIndex = 0;

       // put into input element <input...
       // UserID
       IDispatch *pDisp1 = NULL;

       if ( SUCCEEDED ( pAll -> item ( vName1, vIndex, &pDisp1 ) ) && pDisp1 )
       {
         IHTMLInputElement *pInput = NULL;

         if ( SUCCEEDED ( pDisp1 -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
         {
           pInput -> put_value ( UserID );
           pInput -> Release ();
         }

         pDisp1 -> Release ();
       }


       // put into input element <input...
       // Password
       IDispatch *pDisp2 = NULL;

       if ( SUCCEEDED ( pAll -> item ( vName2, vIndex, &pDisp2 ) ) && pDisp2 )
       {
         IHTMLInputElement *pInput = NULL;

         if ( SUCCEEDED ( pDisp2 -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
         {
           pInput -> put_value ( Password );
           pInput -> Release ();
         }

         pDisp2 -> Release ();
       }


       //-------------
       // put into input element <input...
       // Radio
       IDispatch *pDisp4 = NULL;

       if ( SUCCEEDED ( pAll -> item ( vName4, vIndex, &pDisp4 ) ) && pDisp4 )
       {
         IHTMLInputElement *pInput = NULL;

         if ( SUCCEEDED ( pDisp4 -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
         {
           pInput -> put_checked ( 0 );
           pInput -> Release ();
         }

         pDisp4 -> Release ();
       }
       //-------------


       //-------------
       // put into input element <input...
       // Radio
       IDispatch *pDisp3 = NULL;

       if ( SUCCEEDED ( pAll -> item ( vName3, vIndex, &pDisp3 ) ) && pDisp3 )
       {
         IHTMLInputElement *pInput = NULL;

         if ( SUCCEEDED ( pDisp3 -> QueryInterface ( IID_IHTMLInputElement, ( LPVOID* )&pInput ) ) && pInput )
         {
           pInput -> put_checked ( 1 );
           pInput -> Release ();
         }

         pDisp3 -> Release ();
       }
       //-------------

     }

     pAll -> Release ();
   }

   // click SUBMIT Button
   IHTMLElementCollection *HTMLForms = NULL;

   if ( SUCCEEDED ( pHTMLDocument -> get_forms ( &HTMLForms ) ) && HTMLForms )
   {
     //  slHtmlFormName <form name="SignInForm...>
     TVariant vName5 = "frmLogin";
     TVariant vIndex5 = 0;
     IDispatch *pDisp5 = NULL;

     if ( SUCCEEDED ( HTMLForms -> item ( vName5, vIndex5, &pDisp5 ) ) && pDisp5 )
     {
       IHTMLFormElement *HTMLForm = NULL;

       if ( SUCCEEDED ( pDisp5 -> QueryInterface ( IID_IHTMLFormElement, ( LPVOID* )&HTMLForm ) ) && HTMLForm )
       {
        // HTMLForm -> submit ();
         HTMLForm -> Release ();
       }

       pDisp5 -> Release ();
     }

     HTMLForms -> Release ();
   }

   pHTMLDocument -> Release ();
 }
}

GIZMO
Отправлено: 07.02.2005, 12:45


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Aptem @ 05/02/2005, 10:14)
CODE
void __fastcall TForm1::PutDataIntoForm ( WideString UserID, WideString Password, TCppWebBrowser *WebBrowser )
{
...
}

Да вроде правильно все на первый взгляд. Я попробовал у себя на странице справочника персонала вводить имя, указывать зависимость от регистра и нажимать кнопку все пашет, правда там чек-бокс. Найду с радио-баттонами попробую...

Вернуться в Вопросы программирования в C++Builder