昨天看到的。 可以制作纯粹的资源DLL文件,如library Pictures; {$R Test.res } begin end.即可将其编译为一个DLL文件!然后 var hDll:Hmodule;hDll:= LoadLibrary('Test.dll'); //可以用LoadString,LoadIcon,LoadCursor等载入资源 如: Hicon:=Loadicon(hDll,'TestIcon');Wav音乐直接播放的话可以用PlaySound,未知数据类型可用流,如: Stream:=TResourceStream.Create
user date在程序里调用 Stream:TStream; MyJpg:TJpegImage; Begin Stream:=TResourceStream.Cceat(HINSTANCE,'MyJpg','JPEG'); Try MyJpg:=TJpegImage.Create; Try MyJpg.LoadfromStream(Stream);其它文件也一样。通过数据流的方式什么格式的文件都可以。
MYJPEG JPEG "d:\1.jpg"
另存为d:\Myres.txt;在MSDOS中调用Delphi\bin目录下执行
brcc32 d:\Myres.txt就可以生成Myres.res调用:
1)在.dpr中引用Myres.res
program xxxx; uses
..... {$R *.res}
{$R MyRes.res}
begin
Application.Initialize;
......
Application.Run;
end.
2)在单元中添加这个过程
procedure LoadJPEGFromRes(TheJPEG : string; ThePicture : TPicture);
var
ResHandle : THandle;
MemHandle : THandle;
MemStream : TMemoryStream;
ResPtr : PByte;
ResSize : Longint;
JPEGImage : TJPEGImage;
begin
ResHandle := FindResource(hInstance, PChar(TheJPEG), 'JPEG');
MemHandle := LoadResource(hInstance, ResHandle);
ResPtr := LockResource(MemHandle);
MemStream := TMemoryStream.Create;
JPEGImage := TJPEGImage.Create;
ResSize := SizeOfResource(hInstance, ResHandle);
MemStream.SetSize(ResSize);
MemStream.Write(ResPtr^, ResSize);
FreeResource(MemHandle);
MemStream.Seek(0, 0);
JPEGImage.LoadFromStream(MemStream);
ThePicture.Assign(JPEGImage);
JPEGImage.Free;
MemStream.Free;
end;在form.oncreate中:
LoadJPEGFromRes('MyJPEG',Image1.Picture);
1 jpg myjpg.jpg
改其扩展名为.rc
然后用brcc32.exe *.rc就行了
点击右击,-->new--user date出现一个条目,弹出一对话框,选择你的.jpg文件,好了把资源默认的资源标识改为'Myjpg',点右键就可以改的了Var
Stream:TStream;
MyJpg:TJpegImage;
Begin
Stream:=TResourceStream.Cceat(HINSTANCE,'MyJpg','JPEG');
Try
MyJpg:=TJpegImage.Create;
Try
MyJpg.LoadfromStream(Stream);
Image1.Picture.Assignc(MyJpg);
Finally
MyJpg.Free;
end;
Finally
Stream.Free;
end;
end;
可以制作纯粹的资源DLL文件,如library Pictures;
{$R Test.res }
begin
end.即可将其编译为一个DLL文件!然后
var hDll:Hmodule;hDll:= LoadLibrary('Test.dll');
//可以用LoadString,LoadIcon,LoadCursor等载入资源
如:
Hicon:=Loadicon(hDll,'TestIcon');Wav音乐直接播放的话可以用PlaySound,未知数据类型可用流,如:
Stream:=TResourceStream.Create
MyJpg:TJpegImage;
Begin
Stream:=TResourceStream.Cceat(HINSTANCE,'MyJpg','JPEG');
Try
MyJpg:=TJpegImage.Create;
Try
MyJpg.LoadfromStream(Stream);其它文件也一样。通过数据流的方式什么格式的文件都可以。
var hDll:Hmodule;hDll:= LoadLibrary('Test.dll');
//可以用LoadString,LoadIcon,LoadCursor等载入资源
如:
Hicon:=Loadicon(hDll,'TestIcon');Wav音乐直接播放的话可以用PlaySound,未知数据类型可用流,如:
Stream:=TResourceStream.Create
TEST1 DLLRES "test1.dll"
TEST2 EXERES "test2.exe"
TEST3 BPLRES "test3.bpl"
然后,将这个RC文件加入到Project中。程序运行时,取出资源文件并存成文件。
bool SaveResToFile(LPCSTR ResName, LPCSTR ResType, LPCSTR FileName)
{
int hFile;
HRSRC hRes;
HANDLE hMem; hRes = FindResource(HInstance,
ResName, ResType);
if (hRes==NULL) return false; if (FileExists(FileName))
DeleteFile(FileName);
hFile = FileCreate(FileName);
if (hFile==-1) return false;
hMem = LoadResource(HInstance,hRes);
FileWrite(hFile, LockResource(hMem),
SizeofResource(HInstance,hRes));
FileClose(hFile); return true;
}调用这个函数,将资源存成文件:
SaveResToFile("TEST1", "DLLRES", "Test1.dll");
现在写RC文件是效率低的笨办法!
Delphi的IDE可以直接实现资源的引入!