怎样用我做的项目打开我定义的文件类型(100分)

  • 主题发起人 主题发起人 cagd
  • 开始时间 开始时间
C

cagd

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在写了一个项目,例如可以在菜单项(文件(F))->打开(O)打开我定义的文件(如 *.abcd).
现在我把它做成安装程序了,如何注册新的文件扩展类型,使得我只要双击我的文件(如:file1.abcd)
就可以打开我的应用程序,并且执行相应菜单的功能?

谢谢,我现在有三种类型的文件需要这么做,望大侠们指点。谢谢!!
 
节选自 Delphi中注册表构件TRegistry的应用 王发军

实现文件关联
当MS WORD安装在你的系统中时,它会把.DOC文件与自己关联,当你双击一个DOC文件,就会
启动MS WORD,打开你指定的DOC文件。你也可以把一个文件类型与一个程序关联起来,其秘密
还是在注册表中。如果打开注册表,找到HKEY_CLASSES_ROOT,就会发现这里已经有很多文件
类型。
你也可以在这里增加一个键,建立自己的文件关联。
建立文件关联,一般应有两个步骤:
(1)根据文件类型的扩展名,指定对应的键名(如doc 文件对应的键为doc_auto_file)
该键及其子键的值,将定义该类型的文件的类型说明和操作(如打开、编辑)说明
(2)在指定的键名下,建立子键,指明文件类型说明和操作对应的程序信息
例如,我们可以为.DBF文件建立文件关联,其文件类型说明为"xBase 数据表",使其打开
(Open)文件的操作对应程序C:/Program Files/Borland/DBD/DBD32.EXE。首先,应在注册
表的根键HKEY_CLASSES_ROOT下建立一个键,键名为.DBF,默认值为DBF_Auto_File,表示DBF
类型文件的关联操作信息记录在键HKEY_CLASSES_ROOT/DBF_Auto_File 下;然后,建立键
HKEY_CLASSES_ROOT/DBF_Auto_File,并设其默认值为"xBase 数据表",表示文件类型说明;
再建立键 HKEY_CLASSES_ROOT/DBF_Auto_File/Shell/open/command,设置其默认值为
C:/Program Files/Borland/DBD/DBD32.EXE %1(其中"%1 "为命令行参数),表示打开操作
对应的程序信息。
具体实现如下:同样,在Uses 中加上Registry单元,然后,写下面代码。

{将文件类型strFileExtension与程序
strExeFileName相关联,strDiscription为文件类型说明 }
function AssignToProgram(strFileExtension,
strDiscription,strExeFileName : string ) : boolean;
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create;
//建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_CLASSES_ROOT;
//设置根键值为HKEY_CLASSES_ROOT
//根据文件类型的扩展名,创建或打开对应的键名
.FileExt,如DBF对应'.DBF'
if OpenKey( '.' + strFileExtension, true ) then
begin
result := false;
exit;
end;
//设置键.FileExt默认值为FileExt_Auto_File,
如'.DBF'对应'DBF_Auto_File'
WriteString('',strFileExtension + '_Auto_File');
CloseKey;
//写入自己程序的信息
//根据文件类型的扩展名,创建或打开对应的键名
FileExt_Auto_File
//'.DBF'对应'DBF_Auto_File'
if OpenKey(strFileExtension + '_Auto_File', true ) then
begin
result := false;
exit;
end;
//设置默认值文件类型说明,如DBF可对应'xBase数据表'
WriteString('',strDiscription);
CloseKey;
//创建或打开键名FileExt_Auto_File
/Shell/open/command,该键为表示操作为'打开'
//'.DBF'对应'DBF_Auto_File/shell/open/command'
if OpenKey(strFileExtension + '_Auto_File
/shell/open/command', true ) then
begin
result := false;
exit;
end;
//设置该键的默认值为打开操作对应的程序信息
//如DBF可对应'C:/Program Files/Borland/DBD/DBD32.EXE'
WriteString('',strExeFileName + ' %1');
CloseKey;
Free;
end;
end;
{调用AssignToProgram,使DBF文件与DBD32.EXE关联 }
procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.lines.add('开始');
if AssignToProgram('DBF','xBase数据表'
,'C:/Program Files/borland/dbd/dbd32.exe') then
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;
 
对不起,上面的帖子只解决了问题的一半——建立“打开方式”关联,还有一半:在程序
中接收命令行参数——即文件名,并执行相应操作。(这回不是Paste别人的了)

在主窗体的OnCreate事件中加入:

if ParamCount>0 then //有命令行参数
if FileExists(ParamStr(1)) then //参数是不是文件
begin
if MyColorMap.LoadGame(ParamStr(1)) then //执行相应功能
DrawMap;
end;
当然,上面的代码没有判断文件的类型,在您的应用中,要打开三种文件,可以在FileExists
之后用ExtractFileExt函数获得文件的扩展名,并执行相应的过程。
 
后退
顶部