第二篇 建立程序框架
外壳扩展有好几种类型 在这里 我要实现的是一个 Context Menu 扩展 因为这是最常
见 最有用的扩展类型 而且 所有的外壳扩展都有许多相通的地方 学会一种以后 其他的也
就非常容易掌握了
我计划让这个扩展完成如下的一些功能
1 对任何文件 都能够实现 Copy(Move) to Anywhere Windows 资源管理器
并不直接支持这项功能 不论是 Cut/Copy&Paste 或者是开两个文件夹窗口来
Drag/Drop 都要经历多个步骤才行 毕竟麻烦 我是在工具软件 Nuts & Bolt
中第一次看到这个功能的 当时就觉得它非常有用 不过一直不知道是如何实现
的 现在好了 我们也来 DIY 一回
2 对于 COM 组件库 能够实现 Register/Unregister 的功能 凡是编程的人都应
该知道这个内容 从而不必动用不讨人喜欢的 regsvr32
3 对于图片文件 能够在 Context Menu 中预览 用过PicaView 吗 对了 就是
它 如果只是想知道图片的概貌 又何必非ACDSee 不可 Windows 2000 的
缩略图模式处理图像太慢 而且占用太多资源 我也不喜欢
上述三种情况 几乎涵盖了 Context Menu 扩展所能遇到的所有情况 如何处理单一文件
如何处理多个文件 如何管理自绘式 Owner-Draw 菜单 可以说 只要能妥善处理这三种
情况 那么在 Context Menu 扩展中再没有什么困难的问题了
因为任何外壳扩展首先必须是一个 COM 组件 所以我们就从这里开始
1 用 Delphi 新建一个 ActiveX Library 并保存 我用的名称是 YHShellExt 你当
然可以猜到 YH是我的名字的缩写 你可以把它换成自己的名字
2 再次用 Delphi 新建一个 COM Object 在 COM Object Wizard 中 将对象命名
为 YHContextMenu Options 中的两个检查框都可以不必选中 其他的保持默认
即可
现在这个程序的框架已经建立起来了 Delphi 为我们自动产生了 TYHContextMenu 类的
骨架代码 并且在单元的 initialization 部分自动产生了一个 TComObjectFactory 对象 这个
对象可以完成 COM 组件的注册工作 不过 对于外壳扩展来说 除了注册COM组件之外还必
须完成一些额外的工作 这个组件才具备了外壳扩展的身份 所以我们还需要从
TComObjectFactory 派生一个类才行 对代码稍作修改 完成后应该类似下面这样
unit YHCMImpl;
interface
uses
Windows, Messages, ActiveX, Classes, SysUtils, ComObj, ShellAPI, ShlObj,
Graphics, JPEG, Registry;
type
评论2
最新资源