为什么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;
答案 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;
我的答案的其余部分假设Paste1
是TAction
,应该是TActionList
。但很可能它是一个菜单项,不是吗?一个好的建议是开始使用TAction
和SomeAction.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工作正常。你的问题出在其他地方。