国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

提取應用程序中的圖標資源

2019-11-18 18:55:50
字體:
來源:轉載
供稿:網友

  經常看見一些軟件有著美麗,光艷奪目,非常個性化的圖標,曾幾何時也想擁有,可苦于缺少一點點藝術細胞,只好打起妙手空空的念頭。經過一天的捉摸,也找到一些門道,效果還佳,再用delphi自帶的Image Editor加以修改,徹底私有化,為我所用。灑家用此法做了一些漂亮的圖標,令老友羨慕不已。好了,好東西當然不敢獨享,且容我為各位慢慢道來:
首先用API函數LoadLibrary(lpLibFileName: PChar): HMODULE; stdcall; 把指定的程序模塊映射到調用程序的地址空間去。該函數返回模塊的句柄,假定為hExe;
然后用EnumResourceNames(hExe,RT_ICON,@EnumResName,myflag)找到圖標的資源名,其中參數EnumResName是回調函數,圖標的name值將由回調函數的一個變參得到。
然后再向回調函數體內加入代碼提取圖標就可以了。EnumResourceNames函數將會一直查找每一個圖標直到查找失敗或EnumResName返回false值為止。這樣我們就能提取程序所包含的每一個圖標,榨盡最后一滴油,夠狠吧!
詳細代碼如下:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Menus, ImgList;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
Exit1: TMenuItem;
OpenDialog1: TOpenDialog;
ListView1: TListView;
StatusBar1: TStatusBar;
ImageList1: TImageList;
PRocedure Open1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
FileName: TFileName;
FIcon: TIcon;
public
{ Public declarations }
end;
Function EnumResName(hModule: HMODULE; lpType, lpName: PChar;lParam: Longint):BOOL;stdcall;
var
Form1: TForm1;
hExe: HINST;
implementation
{$R *.DFM}
Function EnumResName(hModule: HMODULE; lpType, lpName: PChar;lParam: Longint):BOOL; //回調函數不能是對象方法
//lpType是要提取的資源類型,這里為RT_ICON
//lpName為圖標資源名
var
hIcon1: HICON;
hResource: HRSRC;
hMem: HRSRC;
lpResource: PByte;
ListItem: TListItem;
Begin
//返回在hExe模塊中lpName指定的圖標資源的句柄;
hResource:=FindResource(hExe,lpName,RT_ICON);
//Load and Lock the icon
hMem:=LoadResource(hExe,hResource);
lpResource:=LockResource(hMem);
//從資源文件中創建圖標并返回其句柄
hIcon1:=Create Iconfrom Resource Ex(lp Resource,Sizeof Resource(hExe,h Resource),True,$00030000,32,32,LR-DEFAULTCOLOR);
with Form1 do
begin
//用控件ImageList保存提取的圖標,并在ListView中顯示出來
FIcon.Handle:=hIcon1;
ImageList1.AddIcon(fIcon);
ListItem:=ListView1.Items.Add;
ListItem.ImageIndex:=ImageList1.Count-1;
end;
result:=true;//注意:只有返回為真值時,才能繼續提取下一個圖標
end;
procedure TForm1.Open1Click(Sender: TObject);
var
myflag: integer;
begin
if Opendialog1.Execute then
begin
FileName:=Opendialog1.FileName;
StatusBar1.Panels.Items[0].Text:=FileName;
Opendialog1.HistoryList.Add(FileName);
hExe:=LoadLibrary((PCharFileName));
myflag:=1;
ImageList1.Clear;
ListView1.Items.Clear;
EnumResourceNames(hExe,RT_ICON,@EnumResName,myflag);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FIcon:=TIcon.Create;
Opendialog1.Filter:='可執行文件(*.exe)|*.exe';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FIcon.Free;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
end.
篇幅所限,存盤和查錯的代碼沒有列出


上一篇:解析IP地址為主機域名

下一篇:Win9x下程序間的數據傳遞

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 陇川县| 盘山县| 新沂市| 扬州市| 乐安县| 博兴县| 大竹县| 红安县| 图们市| 宁晋县| 太谷县| 泰州市| 仙游县| 上虞市| 上栗县| 出国| 新津县| 太仓市| 三原县| 桦南县| 巴林左旗| 佛学| 晋江市| 航空| 朝阳市| 即墨市| 黎平县| 台东市| 和林格尔县| 岫岩| 阿拉善右旗| 大同县| 湘阴县| 康马县| 监利县| 临朐县| 漯河市| 广宗县| 车致| 额尔古纳市| 陆良县|