具體 代碼是下面的﹕
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  

解决方案 »

  1.   

    Active in-place objects must always be given the first chance at translating accelerator keystrokes. You can provide this opportunity by calling IOleInPlaceActiveObject::TranslateAccelerator from your container's message loop before doing any other translation. You should apply your own translation only when this method returns S_FALSE. 
    这里是help里的描述,我想是不是要定义ioleinplaceactiveobject
    为TranslateAccelerator类才可以使用阿
      

  2.   

    试试Uses ComObj,ActiveX.或者直接找找单元源文件里面哪一个对这个有定义。然后uses它就可以了阿