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


    在开发过程中,我们经常需要属于自己的文件类型,自定义的后缀名不仅可以防止用户双击直接改动其中的内容,还可以根据后缀名形象的表示此文件代表的含义。在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.在窗体上放置两个按钮,单元文件全部代码如下:

    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”,选择“创建快捷方式”,右键此快捷方式,选择“属性”,点击“更改图标”,可以看到如下图所示:
    ---------------------
    版权声明:本文为CSDN博主「无幻」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/akof1314/article/details/6443195

  • 相关阅读:
    【bzoj2561】最小生成树 网络流最小割
    【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
    【bzoj4816】[Sdoi2017]数字表格 莫比乌斯反演
    【bzoj3252】攻略 贪心+DFS序+线段树
    【bzoj1690】[Usaco2007 Dec]奶牛的旅行 分数规划+Spfa
    【bzoj3291】Alice与能源计划 模拟费用流+二分图最大匹配
    【bzoj2752】[HAOI2012]高速公路(road) 线段树
    wpf--- TextBlock文字设置属性
    无边框WPF窗体——允许拖动
    C# 枚举、字符串、值的相互转换
  • 原文地址:https://www.cnblogs.com/blogpro/p/11339928.html
Copyright © 2020-2023  润新知