制作一个ActiveFormX控件,里面放置一个TRichEdit控件,然后放置了一个TActionList控件,在TActionList里增加了几个标准的TAction,如TEditCut、TEditCopy、TEditPaste等,放置几个ToolButton按钮,按钮的Action分别设置为以上的Action动作,编译生成的ActiveFormX放在程序执行之后,点击ToolButton按钮之后系统不执行相应的操作,完全不调用相应的操作。调试的时候跟踪发现那几个TAction对象都已建立的,可点击ToolButton按钮就是不执行相应的操作。请问是什么原因啊???注:开发环境是Delphi7

解决方案 »

  1.   

    这个有可能会发生,应该是阻断了按键的消息,像在DLL里的窗体如果加一个TWebBrowser,TWebBrowser控件的CTRL+C也不会复制网页上的内容..
    需要处理Application.OnMessage,将消息传给控件就可以了
      

  2.   

    类似我这样的点击ToolButton操作,怎么将消息传给控件呢?
      

  3.   

    而且在程序里,ActiveFormX里的ToolButton的Enabled的状态总是True的,比如TEditCut,应该是在TRichEdit里选择了文字,其Enabled才等于True啊,可现在不选择任何文字,它的Enabled属性也是True,这些问题是怎么造成的啊???
      

  4.   

    虽然Delphi在封装过程中使它继承了TWinControl,但它似乎并没有由此取得TWinControl的自动获得焦点的能力。看来,极有可能是由于Delphi的VCL消息处理机制同OLE之间存在某种冲突,导致了OLE自己吃掉了部分键盘消息。 既然如此,W实现想不出什么更好的办法。要解决这个问题,一个比较合理的解决方案就是直接捕获并处理Windows的消息映射。于是,他尝试写了一个消息处理方法并把这个方法句柄指定给了Application.OnMessage事件。这样,丢失的回车键又回来了。 procedure TForm1.IEMessageHandler(var Msg: TMsg; var Handled: Boolean); 
    const 
    StdKeys = [VK_TAB, VK_RETURN]; { 标准键 } 
    ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]; { 扩展键 } 
    fExtended = 000000; { 扩展键标志 } 
    begin 
    Handled := False; 
    with Msg do 
        if ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) and 
          ((wParam in StdKeys) or (GetKeyState(VK_CONTROL) < 0) or 
          (wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then 
        try 
          if IsChild(wbEditor.Handle, hWnd) then 
            { 处理所有的浏览器相关消息 } 
          begin 
            with wbEditor.Application as IOleInPlaceActiveObject do 
              Handled := TranslateAccelerator(Msg) = S_OK; 
            if not Handled then 
            begin 
              Handled := True; 
              TranslateMessage(Msg); 
              DispatchMessage(Msg); 
            end; 
          end; 
        except 
        end; 
    end; // IEMessageHandler procedure TForm1.FormCreate(Sender: TObject); 
    begin 
       …… 
       Application.OnMessage := IEMessageHandler; 
    end; 
            我只能给你这一段东西..你看看,有没有什么帮助..
    也可以发代码到论坛上找高手帮你调试调试的