CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  VCL组件使用和开发

请教坛内各位高手请进,如何向TCppWebbrowser控件中获得焦点的edit控件输入一个字符串??

楼主endless(何斌)2006-03-24 13:45:35 在 C++ Builder / VCL组件使用和开发 提问

我在程序中使用到了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控件的属性联系起来?

关键词

  • 控件
  • pirange
  • 字符串
  • bstrfindlocal
  • cppwebbrowser
  • bforward
  • bstrspanwhole
  • cwb
  • pdisprange
  • vactiveelement

得分解答快速导航

  • 帖主:endless
  • ccrun
  • jiangsheng

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo