请教坛内各位高手请进,如何向TCppWebbrowser控件中获得焦点的edit控件输入一个字符串??
我在程序中使用到了CppWebBrowser控件,当我鼠标点击让CppWebBrowser中的某个Edit控件获得焦点后,我的C builder程序如何能够向这个获的焦点的edit输入一个字符串??? 问题点数:100、回复次数:5Top
1 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-24 14:17:32 得分 0
paste?Top
2 楼endless(何斌)回复于 2006-03-24 14:42:11 得分 0
不是,我要做的是通过程序自动将字符串填到获得焦点的edit框里, 而且用户事先并不知道字符串的内容,一切都由程序来控制!!!Top
3 楼ccrun(老妖)(www.ccrun.com)回复于 2006-03-24 14:42:59 得分 60
在窗体上放置一个CppWebBrowser和一个按钮:
#include <mshtml.h>
bool CrnSetActiveElementValue(IHTMLDocument2 *pDoc, String strText)
{
IDispatch *pDisp;
HRESULT hr = pDoc->QueryInterface(IID_IDispatch, (void **)&pDisp);
if(SUCCEEDED(hr))
{
Variant vObj = Variant(pDisp);
Variant vActiveElement = vObj.OlePropertyGet("ActiveElement");
// 63 63 72 75 6E 2E 63 6F 6D
if(!vActiveElement.IsNull() &&
String(vActiveElement.OlePropertyGet("Type")) == String("text"))
vActiveElement.OlePropertySet("Value", strText.c_str());
}
return false;
}
//---------------------------------------------------------------------------
IHTMLDocument2 *__fastcall MyGetDocInterfaceFromCwb(TCppWebBrowser *cwb)
{
IHTMLDocument2 *spDoc = NULL;
if(!cwb->Busy && cwb->Document != NULL)
cwb->Document->QueryInterface(
::IID_IHTMLDocument2, reinterpret_cast<void**>(&spDoc));
return spDoc;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
while(CppWebBrowser1->Busy)
Application->ProcessMessages();
CrnSetActiveElementValue(MyGetDocInterfaceFromCwb(CppWebBrowser1), "test");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
CppWebBrowser1->Navigate(WideString("www.google.com"));
}Top
4 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-24 23:05:36 得分 40
IHTMLInputTextElement::createTextRange
IHTMLTxtRange::move
IHTMLTxtRange::put_text
#include <atlbase.h> // For ATL smartpointers
#include <mshtml.h> // For IHTMLXXX interfaces
#define HTML_FLAG_FINDWHOLEWORD 2
#define HTML_FLAG_FINDMATCHCASE 4
HRESULT HtmlFindNext(
IDispatch* pdispDoc,
BSTR bstrFind,
BOOL bForward,
BOOL bMatchCase,
BOOL bWholeWordOnly)
{
static BSTR bstrSpanWhole = L"Textedit";
static BSTR bstrSpanChar = L"Character";
CComQIPtr<IHTMLDocument2>piDoc(pdispDoc);
CComPtr<IHTMLSelectionObject>piSel;
CComPtr<IHTMLTxtRange>piRange;
CComPtr<IDispatch>pdispRange;
BSTR bstrBookMark=NULL;
CComBSTR bstrFindLocal;
VARIANT_BOOL b;
long lFlag;
if (pdispDoc == NULL)
return E_POINTER;
if (piDoc == NULL)
return E_INVALIDARG;
if (S_OK != piDoc->get_selection(&piSel))
return S_FALSE;
if (S_OK != piSel->createRange(&pdispRange) || (pdispRange == NULL))
return S_FALSE;
if (S_OK != pdispRange->QueryInterface(&piRange))
return S_FALSE;
if (S_OK == piRange->get_text(&bstrFindLocal) && (bstrFindLocal))
{
piRange->select();
piRange->collapse((VARIANT_BOOL)(bForward) ? false : true);
if (bForward)
piRange->moveEnd(bstrSpanWhole, 1, &lFlag);
else
piRange->moveStart(bstrSpanWhole, -1, &lFlag);
piRange->getBookmark(&bstrBookMark);
}
if (bstrFind != NULL)
bstrFindLocal = bstrFind;
if (!bstrFindLocal)
return S_FALSE;
//////////////////
if (!bForward)
{
CComBSTR bstrT;
piRange->expand(bstrSpanWhole, &b);
piRange->collapse((VARIANT_BOOL)false);
piRange->moveStart(bstrSpanChar, -1, &lFlag);
piRange->get_text(&bstrT);
piRange->moveEnd(bstrSpanChar, 1, &lFlag);
piRange->put_text(bstrT);
}
//////////////////
piRange->expand(bstrSpanWhole, &b);
lFlag=0;
if (bstrBookMark)
piRange->moveToBookmark(bstrBookMark, &b);
if (bMatchCase)
lFlag |= HTML_FLAG_FINDMATCHCASE;
if (bWholeWordOnly)
lFlag |= HTML_FLAG_FINDWHOLEWORD;
if ((S_OK == piRange->findText(
bstrFindLocal,
((bForward) ? 0 : 0x80000000),
lFlag, &b)) && (b))
{
piRange->scrollIntoView((VARIANT_BOOL)(bForward) ? false : true);
piRange->select();
return S_OK;
}
return S_FALSE;
Top
5 楼endless(何斌)回复于 2006-03-27 08:59:00 得分 0
感谢两位大侠指教,谢谢.Top
相关问题
- 怎样获得Edit控件里面的字符串
- 在sdk 编程中,如何取Edit 控件中的字符串?
- 请问如何获得对话框上控件Edit上显示的字符串?
- 如何获取edit控件中字符串的第一个字母
- 请问如何向已经有数行字符串的edit控件的最后行之后添加新行(字符串)?
- 在EDIT控件中有一段字符串,任意选中其中的一段,怎样把选中的这段字符串赋给CString变量?
- 很土的问题:不用映射字符串变量,怎么设置一个Edit控件的text..
- 请问SetWindowText()和ReplaceSel()函数在向edit控件书写字符串的时候有什么不同?
- 怎么把在CString变量中的一段字符串插入到Edit控件中,Edit控件中已存在字符?
- 怎么把属性页上控件的值(比如edit显示的字符串)与ActiveX控件的属性联系起来?




