TResourcestream.create对资源文件的调用 ( 积分: 100 )

  • 主题发起人 主题发起人 zhou_jing_wei
  • 开始时间 开始时间
Z

zhou_jing_wei

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.FormCreate(Sender: TObject);
var res:TResourcestream;
var dd:Thandle;
begin
dd:=findresource(hInstance,'11.res',RT_CURSOR);
if dd=0 then showmessage('not find resource');
// res:=TResourcestream.Create(dd,'ABC1',RT_CURSOR);
screen.Cursors[5]:=loadcursor(hInstance,'ABC1');
screen.Cursor:=5;
end;
各位大哥,小弟加上 被注释掉的那一句 就会报错说(不加不报错):'resource ABC1 not found'
听说TResourcestream.Create方法会调用windows api函数 findresource
于是我加上这个api函数来测试,结果输出:'not find resource'
请问仁兄 小弟对TResourcestream.Create的调用错在什么地方?
 
procedure TForm1.FormCreate(Sender: TObject);
var res:TResourcestream;
var dd:Thandle;
begin
dd:=findresource(hInstance,'11.res',RT_CURSOR);
if dd=0 then showmessage('not find resource');
// res:=TResourcestream.Create(dd,'ABC1',RT_CURSOR);
screen.Cursors[5]:=loadcursor(hInstance,'ABC1');
screen.Cursor:=5;
end;
各位大哥,小弟加上 被注释掉的那一句 就会报错说(不加不报错):'resource ABC1 not found'
听说TResourcestream.Create方法会调用windows api函数 findresource
于是我加上这个api函数来测试,结果输出:'not find resource'
请问仁兄 小弟对TResourcestream.Create的调用错在什么地方?
 
这玩意是从可执行文件中读取资源,你的Application的资源列表里没有ABC1
 
这个对你有没有用??、
Function ExtractRes(ResType, ResName, ResNewName : String):boolean;
var
Res : TResourceStream;
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result:=true;
finally
Res.Free;
end;
except
Result:=false;
end;
end;
 
第二个参数错误,应该是个常量参数,而不是数值参数:
res:=TResourcestream.Create(dd,'ABC1',RT_CURSOR);
改为:
ABC1:String;
.......
res:=TResourcestream.Create(dd,ABC1,RT_CURSOR);
screen.Cursors[5]:=loadcursor(hInstance,ABC1);

 
realLearning有理,能不能详细说一说,小弟入门不久。你的Application的资源列表里
 
// 释放资源到文件
function ResourceToFile(const ResType, ResName, FileName: PChar): Boolean;
var
HResource, HGlobal, FHandle, FSize, WSize: LongWord;
FMemory: Pointer;
begin
Result := FALSE;

// 定位资源
HResource := FindResource(HInstance, ResName, ResType);
if (HResource = 0) then Exit;

// 装入资源
HGlobal := LoadResource(HInstance, HResource);
if (HGlobal = 0) then Exit;

// 锁定内存
FMemory := LockResource(HGlobal);
if (FMemory = nil) then
begin
FreeResource(HGlobal);
Exit;
end;

// 建立文件
FHandle := CreateFile(FileName, GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (FHandle = INVALID_HANDLE_VALUE) then
begin
UnlockResource(HGlobal);
FreeResource(HGlobal);
Exit;
end;

// 写入文件
FSize := SizeOfResource(HInstance, HResource);
WriteFile(FHandle, FMemory^, FSize, Wsize, nil);
if (FSize <> Wsize) then
begin
UnlockResource(HGlobal);
FreeResource(HGlobal);
Exit;
end;

// 关闭保存
SetEndofFile(FHandle);
CloseHandle(FHandle);

// 解锁释放
UnlockResource(HGlobal);
FreeResource(HGlobal);

Result := TRUE;
end;
 
Findresource(Hinstance, 资源名称, 资源类别); 或者
TResourceStream.Create(Hinstance, 资源名称, 资源类别);
 
后退
顶部