代码如下://注册文件关联的函数,网上找的
procedure registerfiletype(ft,key,desc,icon,prg:string);
var myreg : treginifile; ct : integer;
begin
ct := pos('.',ft);
while ct > 0 do begin
delete(ft,ct,1);
ct := pos('.',ft);
end;
if (ft = '') or (prg = '') then exit;
ft := '.'+ft;
myreg := treginifile.create('');
try
myreg.rootkey := hkey_classes_root;
if key = '' then key := copy(ft,2,maxint)+'_auto_file';
myreg.writestring(ft,'',key);
myreg.writestring(key,'',desc);
if icon <> '' then
myreg.writestring(key+'\DefaultIcon','',icon);
myreg.writestring(key+'\shell\open\command','',prg+' "%1"'); finally
myreg.free;
end;
end;
//创建关联
procedure TForm1.FormCreate(Sender: TObject);
begin
registerFileType('.tst',
'testrlt',
'test file',
Application.ExeName + ',1',
Application.ExeName);
end;运行这段代码后,双击关联的.tst文件可以打开指定的应用程序,但是.tst文件图标却没有变成程序的图标??甚至手动设置文件关联也不行。
procedure registerfiletype(ft,key,desc,icon,prg:string);
var myreg : treginifile; ct : integer;
begin
ct := pos('.',ft);
while ct > 0 do begin
delete(ft,ct,1);
ct := pos('.',ft);
end;
if (ft = '') or (prg = '') then exit;
ft := '.'+ft;
myreg := treginifile.create('');
try
myreg.rootkey := hkey_classes_root;
if key = '' then key := copy(ft,2,maxint)+'_auto_file';
myreg.writestring(ft,'',key);
myreg.writestring(key,'',desc);
if icon <> '' then
myreg.writestring(key+'\DefaultIcon','',icon);
myreg.writestring(key+'\shell\open\command','',prg+' "%1"'); finally
myreg.free;
end;
end;
//创建关联
procedure TForm1.FormCreate(Sender: TObject);
begin
registerFileType('.tst',
'testrlt',
'test file',
Application.ExeName + ',1',
Application.ExeName);
end;运行这段代码后,双击关联的.tst文件可以打开指定的应用程序,但是.tst文件图标却没有变成程序的图标??甚至手动设置文件关联也不行。
解决方案 »
- 组件的资源占用
- SocketConnection最大连接数才68台的问题!救命~~
- 怎样把一个字符串分割成字符串数组?
- 关又简体和翻体如何知动转换?
- FastReport3.0 的安装
- 怎么用程序把一个HTML页面保存成一个TXT文件。
- 帮帮忙啊,我dephi7里怎么找不到Qreoport这项啊。。
- 前辈们进来看看,关于RadioGroup和数据库的问题 在线等..
- d6使用数据表时间段的问题?
- 向大神求教,关于Delphi StringGrid
- 100关于浏览器控件的技术问题。关于MSHTML.HD的问题!HELP ME!HELP ME!
- 怎么才可以让delphi和C++Builder很好的共存
编程实现文件关联
---- 文件关联的目的是要实现某种扩展名的文件由相应的应用程序来打开,对于编写的应用软件来说,由于一般都有设计者特定的扩展名的数据文件,软件编制者应在程序中实现自动关联而不能由用户手工去实现。下面给出实现文件关联的实用程序。 ---- 实现文件关联的核心是对注册表的操作, 所有的文件关联都在HKEY—CLASSES— ROOT 下面, 要实现文件关联必须在HKEY—CLASSES—ROOT 中增加两个键值,一是和文件扩展名对应的类型说明,二是对这种类型文件的操作所需要执行的应用程序。下面举例说明,本例实现将扩展名为.xyz的文件定义为“我自己的文件”类型,双击此种类型的文件时执行的打开功能使用记事簿程序。 实现这一功能需要用到Delphi中的函数 RegCreateKey、RegSetValue。实现如下: ---- 在窗体中放置一个按钮,双击按钮写如下代码: procedure TForm1.Button1Click(Sender: TObject);
var
lphKey: HKEY;
sKeyName: string;
sKeyValue: string;
begin
sKeyName := ′myfile′;
sKeyValue := ′我的文档′;
RegCreateKey(HKEY—CLASSES—ROOT,
pchar(sKeyName), lphKey);
RegSetValue(lphKey, ′′, REG—SZ,
pchar(sKeyValue), 0);
sKeyName := ′.xyz′;
sKeyValue := ′myfile′;
RegCreateKey(HKEY—CLASSES—ROOT,
pchar(sKeyName), lphKey);
RegSetValue(lphKey, ′′, REG—SZ,
pchar(sKeyValue), 0);
sKeyName := ′myfile′;
sKeyValue := ′c:\Windows\NotePad.exe %1′;
RegCreateKey(HKEY—CLASSES—ROOT,
pchar(sKeyName), lphKey);
RegSetValue(lphKey, ′shell\open\command′, REG—SZ,
pchar(sKeyValue), MAX—PATH);
end;---- 建立一新文件,使其扩展名为.xyz,然后双击它看是否是启动记事簿来打开的。
那重建图标缓存看看行不。删除Windows目录下的ShellIconCache文件再重启看看。