为什么Clipboard.HasFormat(CF_HDROP)在FormCreate中返回false

时间:2011-08-18 16:15:19

标签: delphi clipboard

为什么Clipboard.HasFormat(CF_HDROP)在FormCreate中返回false,即使剪贴板包含Shell格式?

修改

procedure TFormMain.FormCreate( Sender: TObject );
begin
  if Clipboard.HasFormat( CF_HDROP ) then
    MessageDlg( 'true', mtInformation, [ mbOK ], 0 )
  else
    MessageDlg( 'false', mtInformation, [ mbOK ], 0 );
end;

返回false但MyIdleHandler返回true:

Application.OnIdle := MyIdleHandler; 

procedure TFormMain.MyIdleHandler(Sender: TObject; var Done: Boolean); 
begin 
    Paste1.Enabled := Clipboard.HasFormat( CF_HDROP ); 
end;

3 个答案:

答案 0 :(得分:1)

它返回true。我不知道你是否可以/应该将它应用于Paste1按钮(或者它是什么),直到创建了表单,但这表明如果剪贴板上有文件对象,它会返回true:

procedure TForm2.FormCreate(Sender: TObject);
begin
  if  Clipboard.HasFormat( CF_HDROP ) then
    MessageDlg('true', mtInformation, [mbOK], 0)
  else
    MessageDlg('false', mtInformation, [mbOK], 0);
end;

在我的情况下,如果我先将文件复制到剪贴板,则显示“true”,否则显示为false。

答案 1 :(得分:0)

问题很可能您认为的问题。

Clipboard.HasFormat(CF_HDROP);
即使在true程序中,

也可能是FormCreate。尝试使用

procedure TForm1.FormCreate(Sender: TObject);
begin
  if Clipboard.HasFormat(CF_HDROP) then
    ShowMessage('Yes, Rejbrand was right!');
end;

我的答案的其余部分假设Paste1TAction,应该是TActionList。但很可能它是一个菜单项,不是吗?一个好的建议是开始使用TActionSomeAction.Enabled := <something> s。

问题很可能是动作还没有使用。

毕竟,OnUpdate语句应该在相应操作的procedure TForm1.ActionPasteExecute(Sender: TObject); begin RichEdit1.Paste; end; procedure TForm1.ActionPasteUpdate(Sender: TObject); begin ActionPaste.Enabled := Clipboard.HasFormat(CF_TEXT); end; 个事件中运行。例如,

OnUpdate

当显示包含带有操作的菜单项的弹出菜单时。

答案 2 :(得分:0)

Clipboard.HasFormat工作正常。你的问题出在其他地方。