Timer1OnTimer:if Clipboard.HasFormat(CF_TEXT) then
  Edit1.Text := Clipboard.AsText
else
  MessageDlg('There is no text on the Clipboard', mtInformation,
        [mbOK],0);

解决方案 »

  1.   

    使用TActionList就有一个Edit系列的动作(TAction)
    参考johnsonrao的代码
    不过不用放在TTimer.OnTimer事件中处理
    放在TAction.OnUpdate中
      

  2.   

    不用TIMER,拦截菜单弹出的消息,放在该过程中即可!
      

  3.   

    你看 在你点“粘贴”时,你首先得点“编辑”
    在编辑的OnClick里加入
    PasteMenu.Enable:= Clipboard.HasFormat(CF_TEXT);
    就可以了!
    至于你的第二问,我还没遇到过,GZ一下!
      

  4.   

    dext(德克斯特)你的方法行不通,如果说我要在浮动工具栏里有这个按钮的话,那怎么办啊?
      

  5.   

    api钩子应该可以完全实现你的要求,
    不过delphi中好象很少人对它很熟!!!!!你的第二个问题,delphi的控件好象实现不了,不过你可以自己写一个控件。
      

  6.   

    api钩子?我了解啊!以前为了实现屏幕取词,研究了一段时间!只需要在本程序中获得剪贴板状态的程序,并不需要监控其它进程发生的复制到剪贴板!拦截消息就可以了!
    procedure WMDRAWCLIPBOARD(var Message: TMessage); message WM_DRAWCLIPBOARD;
    procedure WMCHANGECBCHAIN(var Message: TMessage); message WM_CHANGECBCHAIN;
    procedure TForm1.WMDRAWCLIPBOARD(var Message: TMessage);
    begin
      sendmessage(NextHandle,WM_DRAWCLIPBOARD,0,0);
    end;
    procedure TForm1.WMCHANGECBCHAIN(var Message: TMessage);
    begin
      if Message.WParam = NextHandle then
      begin
        NextHandle := Message.LParam;
      end
      else
      begin
        sendmessage(NextHandle,
                    WM_CHANGECBCHAIN,
                    Message.WParam,
                    Message.LParam);
      end;
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      ChangeClipboardChain(Handle,NextHandle );
    end;
      

  7.   

    express 公司出的‘BarManager’控件可以作到你说的效果
    而且非常美观,和ie没什么区别,还可以做的比ie还好看
    我现在几乎所有的控件都用express公司的,简直帅呆了。