WEB开发网
开发学院软件开发Delphi 一个从EXE、DLL文件中提取、存取图标完整程序 阅读

一个从EXE、DLL文件中提取、存取图标完整程序

 2006-02-04 13:36:07 来源:WEB开发网   
核心提示:作为一名程序员,会经常为制作、设计程序图标费尽心思,一个从EXE、DLL文件中提取、存取图标完整程序,当我们看到许多应用软件的图标非常漂亮的时候,是多么的羡慕!我们可不可以借鉴一下他们的图标?完全可以!我们利用 ExtractIcon API函数就能够轻松地从ICO文件或可执行文件以及DLL文件中提取图标, 下面的代码
作为一名程序员,会经常为制作、设计程序图标费尽心思,当我们看到许多应用软件的图标非常漂亮的时候,是多么的羡慕!我们可不可以借鉴一下他们的图标?完全可以!我们利用 ExtractIcon API函数就能够轻松地从ICO文件或可执行文件以及DLL文件中提取图标。

下面的代码示范了一个完整的提取图标、存储图标的程序:
unit UFormIconGrabber;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ShellAPI, ExtDlgs;
type
  TForm1 = class(TForm)
   Image1: TImage;
   btNextIcon: TButton;
   Label1: TLabel;
   EditFileName: TEdit;
   btBowserFile: TButton;
   OpenDialog1: TOpenDialog;
   btSaveIco: TButton;
   SavePictureDialog1: TSavePictureDialog;
   btPRevirousIcon: TButton;
   procedure btNextIconClick(Sender: TObject);
   procedure btBowserFileClick(Sender: TObject);
   procedure btSaveIcoClick(Sender: TObject);
   procedure btPrevirousIconClick(Sender: TObject);
  private
   { Private declarations }
  public
   { Public declarations }
   Procedure MoveIconIndex(Const OperateString:String);
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.MoveIconIndex(Const OperateString:String);
const
 I : Integer = 0;
 FileName : String = '';
var
 Count : Integer;
begin
 if( FileName <> EditFileName.Text ) then
   begin
     FileName := EditFileName.Text;
     I := 0;
   end
 else
   if OperateString='MoveNextIcon' then
     Inc(I)
   else
     begin
       if I>0 then
        dec(I);
     end;
//得到总的图标数目
 Count := ExtractIcon( application.Handle, PChar(FileName),$FFFFFFFF);
 if( I < Count ) then
  Image1.Picture.Icon.Handle :=
  ExtractIcon( Application.Handle, PChar(FileName), I ) // I为图标的索引
 else
  ShowMessage('此文件没有更多的图标资源!' );
end;
procedure TForm1.btNextIconClick(Sender: TObject);
begin
 MoveIconIndex('MoveNextIcon');
end;
procedure TForm1.btBowserFileClick(Sender: TObject);
begin
   try
     OpenDialog1.Title:='选择EXE文件或DLL文件:';
     OpenDialog1.Filter:='提取文件(*.EXE;*.DLL;*.ICO)|*.DLL;*.EXE;*.ICO|All files (*.*)|*.*';
     OpenDialog1.FilterIndex:=1;
     if OpenDialog1.Execute then
      EditFileName.Text :=OpenDialog1.FileName;
     MoveIconIndex('MoveNextIcon'); 
   except
     exit;
   end;

end;

procedure TForm1.btSaveIcoClick(Sender: TObject);
begin
   SavePictureDialog1.DefaultExt := GraphicExtension(TIcon);
   SavePictureDialog1.Filter := GraphicFilter(TIcon);
   if SavePictureDialog1.Execute then
     image1.Picture.SaveToFile(SavePictureDialog1.FileName);
end;
procedure TForm1.btPrevirousIconClick(Sender: TObject);
begin
   MoveIconIndex('MovePrevIcon');
end;
end.
    OK!,这样我们使用TImage.Picture.SaveToFile方法就可以很容易地将图标保存到单独的文件中,然后再利用Image Editor作适量的修改即可!

Tags:一个 EXE DLL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接