读书人

怎么用BCB中的CppWebBrowser控件完成网

发布时间: 2012-02-13 17:20:26 作者: rapoo

如何用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的值,就是选中“小型汽车”这一项了。

读书人网 >C++ Builder

热点推荐