您的位置:首页 > 编程语言 > Delphi

Delphi 7使用自定义图标关联文件类型

2011-05-24 19:01 549 查看
在开发过程中,我们经常需要属于自己的文件类型,自定义的后缀名不仅可以防止用户双击直接改动其中的内容,还可以根据后缀名形象的表示此文件代表的含义。在Delphi 7中要实现关联文件图标、关联文件打开,并且关联的图标可以自己指定,而仅非只能使用应用程序的标题图标。
1.新建一个应用程序工程,准备两个ICO图标,其中一个作为应用程序的图标,另一个作为文件关联显示的图标;



2.在工程目录下新建一个“MyIco.rc”文件(可参考《Delphi 7资源文件的使用》),写入以下内容:

myIco ICON "LetterB.ico"
在菜单栏→“Project”→“Add to project...”,将此.rc文件加入工程中;
3.为应用程序设置图标和标题,菜单栏→“Project”→“Options”→”Application“,加载"LetterA.ico";



4.在窗体上放置两个按钮,单元文件全部代码如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
uses Registry, ShlObj;

{-------------------------------------------------------------------------------
Description: 窗体创建函数
-------------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
if ParamCount > 0 then //当启动参数大于0时,则是双击关联文件启动
ShowMessage(ParamStr(1)); //显示双击的文件全称
end;
{-------------------------------------------------------------------------------
Description: 关联文件类型
-------------------------------------------------------------------------------}
procedure TForm1.btn1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CLASSES_ROOT;

{假定要关联的文件类型为.who,指定入口项为WhoFile}
reg.OpenKey('.who',True);
reg.WriteString('','WhoFile');
reg.CloseKey;

{文件打开关联}
reg.OpenKey('WhoFile/shell/open/command',True);
reg.WriteString('','"' + ParamStr(0) + '" "%1"'); //带本身路径作为启动参数
reg.CloseKey;

{文件图标关联}
reg.OpenKey('WhoFile/DefaultIcon',True);
reg.WriteString('','"' + ParamStr(0) + '",1'); //为0则为LetterA.ico图标,为1为LetterB.ico
reg.CloseKey;
finally
reg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nil,nil); //刷新显示
end;
{-------------------------------------------------------------------------------
Description: 撤销关联文件类型
-------------------------------------------------------------------------------}
procedure TForm1.btn2Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CLASSES_ROOT;
reg.DeleteKey('.Who');
reg.DeleteKey('WhoFile');
finally
reg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nil,nil);
end;

end.
5. 编译运行程序。点击“关联”按钮,然后Win+R,输入“regedit”,打开注册表编辑器,定位到“HKEY_CLASSES_ROOT/.who”,可看到右边有个默认项,其数据指向“WhoFile”,然后再定位到“HKEY_CLASSES_ROOT/WhoFile”,可以看到已经为此类型文件绑定了图标和文件打开方式。如下图所示:



6.在任意地方新建一个文本文档,改其全部名称为“test.who”,可以看到图标已经变化,双击此文件,效果如下图所示:





7.另外,也可以通过应用程序的快捷方式查看程序所带的所有图标,右键“Project1.exe”,选择“创建快捷方式”,右键此快捷方式,选择“属性”,点击“更改图标”,可以看到如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: