代码如下://注册文件关联的函数,网上找的
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文件图标却没有变成程序的图标??甚至手动设置文件关联也不行。

解决方案 »

  1.   

    转:
    编程实现文件关联 
    ---- 文件关联的目的是要实现某种扩展名的文件由相应的应用程序来打开,对于编写的应用软件来说,由于一般都有设计者特定的扩展名的数据文件,软件编制者应在程序中实现自动关联而不能由用户手工去实现。下面给出实现文件关联的实用程序。 ---- 实现文件关联的核心是对注册表的操作, 所有的文件关联都在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,然后双击它看是否是启动记事簿来打开的。
      

  2.   

    手动设置都不行?
    那重建图标缓存看看行不。删除Windows目录下的ShellIconCache文件再重启看看。