加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

检查Delphi中的复制与移动拖放

发布时间:2020-12-15 09:42:21 所属栏目:大数据 来源:网络整理
导读:使用’标准’VCL拖放事件OnDragOver和OnDragDrop,如何区分“复制”和“移动”操作? 我似乎没有可用的TDragType,并且键盘Shift状态不会传递给这些事件. 解决方法 这不是您可以从事件中确定的内容,因为事件不会对您的应用程序需求或功能做出任何假设. 将特定
使用’标准’VCL拖放事件OnDragOver和OnDragDrop,如何区分“复制”和“移动”操作?

我似乎没有可用的TDragType,并且键盘Shift状态不会传递给这些事件.

解决方法

这不是您可以从事件中确定的内容,因为事件不会对您的应用程序需求或功能做出任何假设.

将特定拖放解释为具有任何特定语义是应用程序本身的责任 – 操作系统无法知道应用程序将如何对文件的删除作出反应,因此不能假设拖动操作可能对用户意味着什么.

对于许多应用程序,复制/移动之间没有区别,只会拖放.

复制/移动区别是Windows资源管理器应用于文件操作的内容.对于“vanilla”拖放,它会根据原始和目标驱动器卷应用规则 – 默认情况下,在卷上拖放文件是一个移动操作.默认情况下,跨卷拖放是一个副本.

但这些只是应用程序确定的默认规则(Windows资源管理器).用户可以在拖动期间使用键盘快捷键覆盖这些默认值,并且(最重要的是)在删除时使用键盘快捷键.但这些是由特定应用程序(即Windows资源管理器)定义和解释的,而不是操作系统.

因此,如果您的应用程序是可以从Windows资源管理器拖动的文件的放置目标,并且如果您的应用程序区分复制和移动是有意义的,那么您可能需要支持Windows资源管理器支持的相同键盘修饰符.我不相信这些是可修改的(虽然我建议这一点得到确认),所以你可以简单地测试拖动事件中Ctrl或Shift键的状态:

Ctrl         = COPY
Shift        = MOVE
Ctrl + Shift = MAKE SHORTCUT  (if this is applicable to your application)

GetKeyState()可用于在任何给定时刻直接询问特定密钥的状态.

如果需要改变“默认”行为,那么您必须将自己的测试应用于源信息以确定哪个默认值最有意义(即模仿Windows资源管理器“卷边界”默认规则),或者只需选择最合适的或直观的应用程序默认操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读