当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·关于图标问题    »显示摘要«
    摘要: 请问:我做好了一个程序,如何改变其窗口左上角的小图标啊? ......
 ·寻求文件上传程序    »显示摘要«
    摘要: 寻求一个完整的文件上传程序。 可以上传:文本文件、图片、声音文件、视频文件、动画等 ......


纳闷,我自己做了个浏览器,基于IE内核,但在浏览器页面中的编辑匡里却接受不到回车键,真奇怪,为什么我并没有在显示的程序中用消息

我的浏览器是个MDI多文档窗口界面,在MDI主窗口中我用消息重画了CLIENT   WINDOW但在MDI   CHILD   FORM   中,我并没有用到消息的程序,其他的按键多可以正常使用,惟独回车键却不正常,我的窗口接收不到我按的ENTER键。比如,我在这里“提问”页中有个“文章内容:”的多行文本框,但我在这里输入文字的时候按回车键,它就是不换行,更本没用。我很纳闷,大家帮助我吧。

NO.1   作者: cker

呵呵,在你的Form上放一个OleContainer就好了

NO.2   作者: wangxd

去http://eagleboost.myrice.com/issues/News.htm看看吧

NO.3   作者: matq2008

我用cppwebbrowser没有什么问题呀!完全同实际的网页应用一样

NO.4   作者: Atomictry

建议用全局钩子,截获所有键盘消息,不过太累。你可以用下面代码:  
  //---------------------------------------------------------------------------  
   
  #include   <vcl.h>  
  #pragma   hdrstop  
   
  #include   "Unit1.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   link   "SHDocVw_OCX"  
  #pragma   resource   "*.dfm"  
  TForm1   *Form1;  
  HHOOK   g_hLogHook=NULL;  
  HOOKPROC   JournalLogProc(int   iCode,WPARAM   wParam,   LPARAM   lParam);  
  //---------------------------------------------------------------------------  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
                  :   TForm(Owner)  
  {  
  }  
  //---------------------------------------------------------------------------  
   
  void   __fastcall   TForm1::FormCreate(TObject   *Sender)  
  {  
                if   (g_hLogHook==NULL)  
                  g_hLogHook=SetWindowsHookExA(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0);   //安装日志钩子  
  }  
  //---------------------------------------------------------------------------  
  HOOKPROC   JournalLogProc(int   iCode,WPARAM   wParam,   LPARAM   lParam)  
  {  
        if   (iCode<0)  
                        return   (HOOKPROC)CallNextHookEx   (g_hLogHook,iCode,wParam,lParam);  
   
                        EVENTMSG   *pEvt=(EVENTMSG   *)lParam;  
                    if   (pEvt->message==WM_KEYDOWN)  
                    {  
                          int   vKey=LOBYTE(pEvt->paramL);  
                          if(vKey==13)  
                          {  
                          Form1->Close();             //你要做的事;  
                          }  
                    }  
          return   (HOOKPROC)CallNextHookEx(g_hLogHook,iCode,wParam,lParam);  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormClose(TObject   *Sender,   TCloseAction   &Action)  
  {  
  if   (g_hLogHook!=NULL)  
  {UnhookWindowsHookEx(g_hLogHook);  
  g_hLogHook=NULL;  
  }  
  }  
  //---------------------------------------------------------------------------  
   
  祝你成功。  
   
 

NO.5   作者: sephil

如同程序里每个窗体上有一个“缺省”按钮一样,Web页面上的每个Form也有一个“缺省”按钮——即属性为“Submit”的按钮,当用户按下回车键时就相当于鼠标单击了“Submit”。但是TWebBrowser似乎并不响应回车键,并且,即使把包含TWebBrowser的窗体的KeyPreview设为True,在窗体的KeyPress事件里还是不能截获用户向TWebBrowser发出的按键。  
    我的解决办法是用ApplicatinEvents构件或者自己编写TApplication对象的OnMessage事件,在其中判断消息类型,对键盘消息做出响应。至于点击“提交”按钮,可以通过分析网页源代码的方法来实现,不过我找到了更为简单快捷的方法,有两种,第一种是我自己想出来的,另一种是别人写的代码,这里都提供给大家,以做参考。  
   
    A、用SendKeys函数向WebBrowser发送回车键  
        在Delphi   5光盘上的Info\Extras\SendKeys目录下有一个SndKey32.pas文件,其中包含了两个函数SendKeys和AppActivate,我们可以用SendKeys函数来向WebBrowser发送回车键,我现在用的就是这个方法,使用很简单,在WebBrowser获得焦点的情况下,用一条语句即可:  
   
     Sendkeys(~,true);//   press   RETURN   key  
   
     SendKeys函数的详细参数说明等,均包含在SndKey32.pas文件中。  
   
    B、在OnMessage事件中将接受到的键盘消息传递给WebBrowser。  
   
     procedure   TForm1.ApplicationEvents1Message(var   Msg:   TMsg;   var   Handled:   Boolean);    
     {fixes   the   malfunction   of   some   keys   within   webbrowser   control}  
     const  
      StdKeys   =   [VK_TAB,   VK_RETURN];   {   standard   keys   }  
      ExtKeys   =   [VK_DELETE,   VK_BACK,   VK_LEFT,   VK_RIGHT];   {   extended   keys   }  
      fExtended   =   $01000000;   {   extended   key   flag   }  
     begin  
      Handled   :=   False;  
      with   Msg   do  
      if   ((Message   >=   WM_KEYFIRST)   and   (Message   <=   WM_KEYLAST))   and  
       ((wParam   in   StdKeys)   or    
       {$IFDEF   VER120}(GetKeyState(VK_CONTROL)   <   0)   or   {$ENDIF}  
       (wParam   in   ExtKeys)   and    
       ((lParam   and   fExtended)   =   fExtended))   then  
      try  
       if   IsChild(Handle,   hWnd)   then   {   handles   all   browser   related   messages   }  
       begin  
        with   {$IFDEF   VER120}Application_{$ELSE}Application{$ENDIF}   as  
          IOleInPlaceActiveObject   do  
         Handled   :=   TranslateAccelerator(Msg)   =   S_OK;  
         if   not   Handled   then  
         begin  
          Handled   :=   True;  
          TranslateMessage(Msg);  
          DispatchMessage(Msg);  
         end;  
         end;  
      except  
      end;  
     end;   //   MessageHandler  
   
      
   
 


 ·关于注册表    »显示摘要«
    摘要: 谁能给一个简单的注册表子键,建造、读写程序。 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE