首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么用BCB中的CppWebBrowser控件完成网页自动填表

2012-02-13 
如何用BCB中的CppWebBrowser控件完成网页自动填表如题图,文本输入部分已经照抄高手的代码行了,但下拉列表

如何用BCB中的CppWebBrowser控件完成网页自动填表
如题图,文本输入部分已经照抄高手的代码行了,但下拉列表选择部分不知道怎么实现


网页文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

  <tr>
  <td colspan="2" align="center"><b>车辆违法查询</b></td>
  </tr>
  <tr>
  <td>车牌号</td>
  <td><input name="cphm" type="text" style="width:60px; height:12px;" value="H" /></td>
  </tr>
  <tr>
  <td>车架号</td>
  <td><input name="cj" type="text" style="width:80px; height:12px;" /></td>
  </tr>
  <tr>
  <td>发动机号</td>
  <td><input name="fdj" type="text" style="width:80px; height:12px;" /></td>
  </tr>
  <tr>
  <td width="60">号牌种类</td>
  <td><select name="hpzl" size="0" id="hpzl" style="WIDTH: 95px;" valign="center">
<option value="" selected="selected">请选择</option>
<option value="01">大型汽车</option>
<option value="02">小型汽车</option>
<option value="03">使馆汽车</option>
<option value="04">领馆汽车</option>
<option value="05">境外汽车</option>
<option value="06">外籍汽车</option>
<option value="07">两、三轮摩托车</option>
<option value="08">轻便摩托车</option>
<option value="09">使馆摩托车</option>
<option value="10">领馆摩托车</option>
<option value="11">境外摩托车</option>
<option value="12">外籍摩托车</option>
<option value="13">农用运输车</option>
<option value="14">拖拉机</option>
<option value="15">挂车</option>
<option value="16">教练汽车</option>
<option value="17">教练摩托车</option>
<option value="18">试验汽车</option>
<option value="19">试验摩托车</option>
<option value="20">临时入境汽车</option>
<option value="21">临时入境摩托车</option>
<option value="22">临时行驶车</option>
<option value="23">警用汽车</option>
<option value="24">警用摩托</option>
</select></td>
  </tr>
  <tr>
  <td colspan="2" align="center"><input type="submit" name="button" id="button" value="查询" onclick="return checkadd()" /></td>
  </tr>
</form>
</body>
</html>


程序:
void __fastcall TForm1::PutInput(TCppWebBrowser *CppWebBrowser1, AnsiString Cph,AnsiString Cjh,AnsiString Fdjh,AnsiString Jszh,AnsiString Dabh)
{

  VARIANT id, index,id1,index1;
  IDispatch *spDispatch;
  IHTMLDocument2 *pDoc2;
  IHTMLElement *pElement;
  IHTMLElementCollection *pElementCol;
  IHTMLFormElement *pFormElement;
  IHTMLInputElement *pInputElement;


  IDispatch *WebDocument=static_cast <IDispatch*> (CppWebBrowser1-> Document);
  pDoc2=static_cast <IHTMLDocument2*> (WebDocument);

  //首先获取IWebBrowser2接口
  if (SUCCEEDED(pDoc2-> get_forms(&pElementCol))) //得到form
  {
  long p=0;
  if(SUCCEEDED(pElementCol-> get_length(&p))) //哪一个form
  if(p!=0)
  {
  for(long i=0;i <=(p-1);i++) 
  {
  V_VT(&id) = VT_I4; 
  V_I4(&id) = i;
  V_VT(&index) = VT_I4;
  V_I4(&index) = 0;

  if(SUCCEEDED(pElementCol-> item(id,index, &spDispatch)))
  { 
  if(SUCCEEDED(spDispatch-> QueryInterface(IID_IHTMLFormElement,(void**)&pFormElement)))
  {
  long q=0;
  if(SUCCEEDED(pFormElement-> get_length(&q))) //得到form中的控件个数 
  for(long j=0;j <=(q-1);j++)
  { 
  V_VT(&id) = VT_I4;
  V_I4(&id) = j;
  V_VT(&index) = VT_I4;
  V_I4(&index) = 0; 
  if(SUCCEEDED(pFormElement-> item(id,index, &spDispatch)))
  { 
  if(SUCCEEDED(spDispatch-> QueryInterface(IID_IHTMLElement,(void**)&pElement)))
  {
  if(SUCCEEDED(spDispatch-> QueryInterface(IID_IHTMLInputElement,(void**)&pInputElement)))
  { 
  //AfxMessageBox( "已经获取IHTMLInputTextElement ");
  BSTR Value;
  BSTR Type;
  BSTR Id;
  BSTR Name; 

  pInputElement-> get_type(&Type); //获取类型
  pInputElement-> get_value(&Value); //获取值
  pElement-> get_id(&Id);//获取Id的方法不一样 
  pInputElement-> get_name(&Name); //获取它的名字


  Memo1->Lines->Add(Type);
  Memo1->Lines->Add(Value);
  Memo1->Lines->Add(Id);
  Memo1->Lines->Add(Name);
  Memo1->Lines->Add("-------"); 


  AnsiString tempName;
  tempName = AnsiString(Type).UpperCase();
  //Memo1->Lines->Add(tempName);
  if(tempName == "TEXT") //获取和设置文本框的值
  {
  if (AnsiString(Name).UpperCase() =="CPHM")
  pInputElement-> put_value((WideString)Cph.c_str());


  if (AnsiString(Name).UpperCase() =="CJ"||AnsiString(Name).UpperCase() =="B_CJ")
  pInputElement-> put_value((WideString)Cjh.c_str());
  if (AnsiString(Name).UpperCase() =="FDJ"||AnsiString(Name).UpperCase() =="B_FDJ")
  pInputElement-> put_value((WideString)Fdjh.c_str());
  if (AnsiString(Name).UpperCase() =="JSZ1"||AnsiString(Name).UpperCase() =="JSZ2")
  pInputElement-> put_value((WideString)Jszh.c_str());
  if (AnsiString(Name).UpperCase() =="DAH1"||AnsiString(Name).UpperCase() =="DAH2")
  pInputElement-> put_value((WideString)Dabh.c_str());
  }
   
  pInputElement-> Release(); 
  }
  else //不是input框 
  {
  }
  pElement-> Release();
  }//if pelement 
  spDispatch-> Release();
  } 
  }
  pFormElement-> Release();
  }
  spDispatch-> Release(); 
  }
  } 
  }
  }
  if(pDoc2) pDoc2-> Release();

}

[解决办法]
下拉列表也是一样啊,put_Value设置02的值,就是选中“小型汽车”这一项了。

热点排行