Re: IHTMLInputElement::put_value doesn't set editbox value?
Two things:
1) You need to wait until the DocumentComplete() before you edit it.
So you would you edit in the OnDocumentComplete() handler for the
web component.
2) I presume the control element you wish to change is this?
<input type="text" name="myEditBox" size="20"> ???
If so, you don't look for "text", you normally look for the element
attribute
id <INPUT id="myEditBoxId">
class <INPUT class"colorClass" ...>
tagName <INPUT>
The typical way is to use the element id attribute:
<input id="myEditboxId" type="text" name="myEditBox" size="20">
and try to use an easy HTML interface like IHTMLDocument3 that allows
you to use the function:
IHTMLDocument3::getElementById(idName)
which is what JavaScript programmers uses to find elements in DOM.
While you can have a collection of the same id's, that is generally
bad html/javascript programming since the above POWERFUL function only
return one element.
via C/C++, you would add this to your DocumentComplete() handler:
HRESULT hr;
CComQIPtr<IHTMLDocument3> dom = m_web.get_Document();
if (dom != NULL)
{
TRACE("GOT DOM!\n");
}
CComPtr<IHTMLElement> pElem = 0;
CComBSTR bs = "myEditBoxId";
hr = dom->getElementById(bs,&pElem);
if (SUCCEEDED(hr) && pElem != NULL)
{
TRACE("GOT IT!\n");
CString sTemp (_T("TestVal"));
BSTR bstrNewValue = sTemp.AllocSysString ();
pElem->put_innerText(bstrNewValue);
SysFreeString(bstrNewValue);
// add some color
pElem->put_className(L"clRed");
}
For adding the color class, add this to your <HEAD></HEAD> block:
<style>
..clRed { color: red; font-weight: bold;}
</style>
--
HLS
Jingcheng wrote:
IHTMLInputElement::put_value doesn't set editbox value?
I want to set a the editbox in a html-form.
IHTMLInputElement::put_value returns S_OK, but the text of the
editbox is not set, instead it's just cleared. Can you please help me
take a look?
The following is my C++ code:
CString filename = _T("C:\\temp\\test.htm");
_variant_t varFlags(0L);
_variant_t varMissing(0L);
m_browser.Navigate(filename, &varFlags, &varMissing, &varMissing,
&varMissing);
LPUNKNOWN lpUnk = m_browser.GetControlUnknown();
IWebBrowser2Ptr ipWebCtrl(lpUnk);
VARIANT_BOOL bBusy = VARIANT_TRUE;
while (bBusy == VARIANT_TRUE)
ipWebCtrl->get_Busy(&bBusy);
IDispatchPtr ipDispatch;
HRESULT hr = ipWebCtrl->get_Document(&ipDispatch);
IHTMLDocument2Ptr ipHtmlDoc2(ipDispatch);
if (!ipHtmlDoc2)
return;
IHTMLElementCollectionPtr ipElements;
ipHtmlDoc2->get_all(&ipElements);
if (!ipElements)
return;
long count = 0;
ipElements->get_length(&count);
for(long i = 0; i < count; i++)
{
LPDISPATCH lpItem;
ipElements->item(CComVariant(i), CComVariant(i), &lpItem);
IHTMLInputElementPtr ipInput(lpItem);
if(!ipInput)
continue;
// Edit-Field?
BSTR bstrType;
ipInput->get_type(&bstrType);
if (CString(bstrType) == "text")
{ // Fill in Text
CString sTemp (_T("TestVal"));
BSTR bstrNewValue = sTemp.AllocSysString ();
ipInput->put_value (bstrNewValue);
SysFreeString(bstrNewValue);
}
}
The following is my test.htm:
<html>
<head>
</head>
<body>
<script language="JScript"><!--
function GoNext()
{
id = document.all.userID.value;
window.external.GoNext("$#pageName:#UserIDPage.htm$#userID:#" + id +
"$#");
}
//--></script>
<table border="0" width="60%" align="center">
<tr>
<td width="100%">
<form>
<p><input type="text" name="myEditBox" size="20"> Edit</p>
</form>
<form>
<p><input type="checkbox" name="myCheck1" value="ON">
Chk1
<input type="checkbox" name="myCheck2" value="ON"
checked>Chk2
<input type="checkbox" name="myCheck3" value="ON">Chk3</p>
</form>
<form">
<p><input type="radio" value="V1" checked name="myRadio"> Op1
<input type="radio" name="myRadio" value="V2">
Op2 <input type="radio" name="myRadio" value="V3">Op3</
p>
</form>
<form>
<p><select size="1" name="myDropDown">
<option selected>Sel 1</option>
<option>Sel 2</option>
<option>Sel 3</option>
</select> Sel</p>
</form>
<form>
<p align="center"><input type="text" name="userID" size="20"></p>
</form>
<form>
<p align="center"><input type="button" onclick="GoNext();"
value="Next >>" name="NextBtn"></p>
</form>
</td>
</tr>
</table>
</body>
</html>
--
HLS