在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
更多有关资源的问题参考API应用相关篇章 program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R Project1.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end. 这个资源文件中至少包含着文件图标, 假如我们删除 {$R *.res} 后编译, 看前后对比图:
procedure TForm1.FormCreate(Sender: TObject); begin Application.Icon.LoadFromFile('c:/temp/my.ico'); end;
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} //使用资源中的第一个自定义图标 procedure TForm1.Button1Click(Sender: TObject); begin Application.Icon.Handle := LoadIcon(HInstance, 'ico1'); { HInstance 当前程序实例的句柄, 调用资源文件一定要用到它; ico1 是资源文件的标识符; LoadIcon 是个 API 函数, 专门用于调用资源中的 ico 文件, 它返回的是指定 ico 文件的句柄. } end; //使用资源中的第二个自定义图标 procedure TForm1.Button2Click(Sender: TObject); begin Application.Icon.Handle := LoadIcon(HInstance, 'ico2'); end; //使用资源中默认的程序图标 procedure TForm1.Button3Click(Sender: TObject); begin Application.Icon.Handle := LoadIcon(HInstance, 'MainIcon'); end; //不使用图标(会显示 Windows 系统的默认图标) procedure TForm1.Button4Click(Sender: TObject); begin Application.Icon := nil; end; end. //效果图:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Image1: TImage; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Image1.AutoSize := True; end; procedure TForm1.Button1Click(Sender: TObject); begin Image1.Picture.Bitmap.Handle := LoadBitmap(HInstance, 'bmp1'); end; procedure TForm1.Button2Click(Sender: TObject); begin image1.Picture.Bitmap.LoadFromResourceName(HInstance, 'bmp2'); end; end. //效果图:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var bit: TBitmap; procedure TForm1.FormCreate(Sender: TObject); begin bit := TBitmap.Create; end; //对只有编号的图片资源需要用 LoadFromResourceID 调用 procedure TForm1.Button1Click(Sender: TObject); begin bit := TBitmap.Create; bit.LoadFromResourceID(HInstance, 1); Self.Brush.Bitmap := bit; Repaint; end; procedure TForm1.Button2Click(Sender: TObject); begin bit := TBitmap.Create; bit.LoadFromResourceID(HInstance, 2); Self.Brush.Bitmap := bit; Repaint; end; procedure TForm1.FormDestroy(Sender: TObject); begin bit.Free; end; end. //效果图: //rc 文件: cur1 CURSOR cur/kyodai.cur cur2 CURSOR cur/static.cur //或者 cur1,CURSOR,cur/kyodai.cur cur2,CURSOR,cur/static.cur //程序代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Screen.Cursors[1] := LoadCursor(HInstance, 'cur1'); Screen.Cursors[2] := LoadCursor(HInstance, 'cur2'); Panel1.Cursor := TCursor(1); //Panel1.Cursor := 1; 也可, 因为 TCursor 就是个数字类型. Panel2.Cursor := TCursor(2); end; end. //效果图:
//rc 文件: MyMenu1 MENU begin Popup "File" begin MenuItem "&Open" MenuItem "&Save" MenuItem Separator MenuItem "E&xit" end end {严格的头可能是这样写: MyMenu1 MENU PRELOAD DISCARDABLE} //程序代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var hm: HMENU; begin hm := LoadMenu(HInstance, 'MyMenu1'); SetMenu(Handle, hm); end; end. //效果图:
//rc 文件: StringTable begin 0 "AAAA" 1 "BBBB" 2 "CCCC" 3 "DDDD" end //也可以这样写: StringTable begin 0,"AAAA" 1,"BBBB" 2,"CCCC" 3,"DDDD" end //还可以这样写: StringTable { 0,"AAAA" 1,"BBBB" 2,"CCCC" 3,"DDDD" } {严格的头可能是这样写: STRINGTABLE DISCARDABLE} //程序代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Clear; with Memo1.Lines do begin Add(LoadStr(0)); Add(LoadStr(1)); Add(LoadStr(2)); Add(LoadStr(3)); end; end; end. //效果图:
//rc 文件: sound1 WAVE "SoundFile1.wav" sound2 WAVE "SoundFile2.wav" //代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses MMSystem; {下面用到的 sndPlaySound、PlaySound 都是在此单元声明的} procedure TForm1.Button1Click(Sender: TObject); var rs: TResourceStream; begin rs := TResourceStream.Create(HInstance, 'sound1', 'WAVE'); sndPlaySound(rs.Memory, SND_ASYNC or SND_MEMORY); rs.Free; end; procedure TForm1.Button2Click(Sender: TObject); var rs: TResourceStream; begin rs := TResourceStream.Create(HInstance, 'sound2', 'WAVE'); PlaySound(rs.Memory, HInstance, SND_ASYNC or SND_MEMORY); rs.Free; end; end.
//下面是 Windows 支持的资源格式: RT_CURSOR = MakeIntResource(1); RT_BITMAP = MakeIntResource(2); RT_ICON = MakeIntResource(3); RT_MENU = MakeIntResource(4); RT_DIALOG = MakeIntResource(5); RT_STRING = MakeIntResource(6); RT_FONTDIR = MakeIntResource(7); RT_FONT = MakeIntResource(8); RT_ACCELERATOR = MakeIntResource(9); RT_RCDATA = Types.RT_RCDATA; //MakeIntResource(10); RT_MESSAGETABLE = MakeIntResource(11); DIFFERENCE = 11; RT_GROUP_CURSOR = MakeIntResource(DWORD(RT_CURSOR + DIFFERENCE)); RT_GROUP_ICON = MakeIntResource(DWORD(RT_ICON + DIFFERENCE)); RT_VERSION = MakeIntResource(16); RT_DLGINCLUDE = MakeIntResource(17); RT_PLUGPLAY = MakeIntResource(19); RT_VXD = MakeIntResource(20); RT_ANICURSOR = MakeIntResource(21); RT_ANIICON = MakeIntResource(22); //尽管 Windows 规定 RCDATA 用作自定义格式, 我们也可以自定义格式名称, 譬如本例(rc 文件): MyFile1 RCDATA "c:/Windows/system32/notepad.exe" MyFile2 MyRes "c:/Windows/System32/calc.exe" {上面把 notepad.exe 时指定为 RCDATA 格式; 把 calc.exe 就指定成了自定义的 MyRes 格式} //本例在资源中嵌入了记事本和计算器, 然后提取并调用: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var rs: TResourceStream; begin rs := TResourceStream.Create(HInstance, 'MyFile1', RT_RCDATA); rs.SaveToFile('c:/temp/pad.exe'); WinExec('c:/temp/pad.exe', 1); rs.Free; end; procedure TForm1.Button2Click(Sender: TObject); var rs: TResourceStream; begin rs := TResourceStream.Create(HInstance, 'MyFile2', 'MyRes'); rs.SaveToFile('c:/temp/sum.exe'); WinExec('c:/temp/sum.exe', 1); rs.Free; end; end.
然后 Ctrl+F9 编译; 此时在工程目录下会生成我们需要的 Project1.dll.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormPaint(Sender: TObject); var h: THandle; bit: TBitmap; begin h := LoadLibrary('c:/temp/Project1.dll'); {载入 DLL} bit := TBitmap.Create; bit.LoadFromResourceName(h, 'img1'); {提取资源} Canvas.Draw(10, 10, bit); {在窗体上绘制图片} FreeLibrary(h); {载卸 DLL} bit.Free; end; end. //效果图: |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论