• Delphi实现提取可执行文件内部所有图标


    在窗体中添加TImage 组件、TOpenDialog组件和TButton组件,TImage组件充当显示文件
    内图标的容器,TOpenDialog组件和TButton组件用来激活提示用户选择GIF动画的对话框。

    首先在窗体的uses段中添加ShellAPI,然后添加按钮响应代码如下:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    i: Integer;
    LargeIcon, SmallIcon: Hicon;
    Num: integer;
    begin
    if OpenDialog1.Execute then
    begin
    Self.Image1.Canvas.Refresh;
    Num := ExtractIconEx(pchar(OpenDialog1.FileName),
    -1,    //设置为-1返回指定文件包含的个数
    LargeIcon,
    SmallIcon,
    1); 
    for i := 0 to Num - 1 do   //这样得到最后一个图标是程序本身的图标。
    begin
    ExtractIconEx(Pchar(OpenDialog1.FileName), i, LargeIcon, SmallIcon, 1);
    DrawIcon(image1.Canvas.Handle, (i div 4)*40, (i mod 4)* 40, large);
    end;
    end;
    end;

    当用户在程序运行过程中选择一个可执行文件后,程序首先通过self.Image1.Canvas.
    Refresh语句清除TImage组件上的显示内容,然后通过将ExtractIconEx函数的第2个参数指定
    为-1来取得可执行文件中图标的数目。得到数目后,通过一个循环中的ExtractIconEx (PCh
    ar(self.OpenDialog1.FileName), i, Large, Small, 1)语句把可执行文件中的大、小图标
    分别存储在Large和Small变量中。最后通过DrawIcon函数在TImage组件上绘制图标。

    整个单元程序代码如下:

    unit Unit1;

    interface

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

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
    i: Integer;
    LargeIcon, SmallIcon: Hicon;
    Num: integer;
    begin
    if OpenDialog1.Execute then
    begin
    Self.Image1.Canvas.Refresh;
    Num := ExtractIconEx(pchar(OpenDialog1.FileName),
    -1, //设置为-1返回指定文件包含的个数
    LargeIcon,
    SmallIcon,
    1);
    for i := 0 to Num - 1 do //这样得到最后一个图标是程序本身的图标。
    begin
    ExtractIconEx(Pchar(OpenDialog1.FileName), i, LargeIcon, SmallIcon, 1);
    DrawIcon(image1.Canvas.Handle, (i div 4)*40, (i mod 4)* 40, LargeIcon);
    end;
    end;
    end;

    end.

  • 相关阅读:
    Django中的syncdb命令
    notepad++下的字体设置
    python中的getattr函数
    python实现虚拟茶话会
    利用python爬取海量疾病名称百度搜索词条目数的爬虫实现
    SQL里面如何取得前N条数据?
    python中怎么查看当前工作目录和更改工作目录
    python中thread模块中join函数
    python中的自测语句是什么?
    python读取数据库数据有乱码怎么解决?
  • 原文地址:https://www.cnblogs.com/spiritofcloud/p/3978300.html
Copyright © 2020-2023  润新知