problem with APIs (BeginUpdateResource, UpdateRe.......etc)

delphi package - madRes, madTools, madStrings, ...

problem with APIs (BeginUpdateResource, UpdateRe.......etc)

Postby beginner » Thu Jun 29, 2006 9:15 am

hi

i wrote this little code to change the icon of my program, but it didn't work, i don't know where is the problem, is it in this APIs or in my program, or in my code..


this is the code:

Code: Select all
procedure TForm1.Button1Click(Sender: TObject);
var
  hFile, hIcon Thandle;
  p: Pointer;
  dwReadBytes: DWORD;

begin
  hFile:= BeginUpdateResource(Pchar('MyFile.exe'), TRUE);
  hIcon:= CreateFile(Pchar('AnyIcon.ico'), GENERIC_READ, FILE_SHARE_READ, NIL,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  If hIcon <> INVALID_HANDLE_VALUE then
  GetMem(p, GetFileSize(hIcon, nil));
  ReadFile(hIcon, p^, GetFileSize(hIcon, nil), dwReadBytes, nil);

  UpdateResource(hFile, RT_GROUP_ICON, Pchar('ICON'), 0, p, GetFileSize(hFile, nil));
  UpdateResource(hFile, RT_ICON, Pchar('1'), 0, p, GetFileSize(hFile, nil));

  EndUpdateResource(hFile, false);
  CloseHandle(hFile);
  CloseHandle(hIcon);
end;



btw, i can chage the icon of my program in (Resource Hacker)...
and after this code the file size is increased by the size of the icon



could you please correct this code, or give me the simplest code to change the icon ... " i use windows XP "

Thank you alot in advance....
beginner
 
Posts: 5
Joined: Tue Apr 04, 2006 9:58 am

Postby madshi » Thu Jun 29, 2006 9:29 am

First of all, you're using the win32 API. The madRes API is only available as "BeginUpdateResourceW". I'd suggest that you put "madRes." in front of all the APIs, so that you can be sure that you're really using the madRes APIs and not the OS APIs.

Next, use LoadIconGroupResourceW instead of CreateFile+UpdateResource.
madshi
Site Admin
 
Posts: 9431
Joined: Sun Mar 21, 2004 5:25 pm

Postby beginner » Thu Jun 29, 2006 9:19 pm

thank you madshi for your reply..

First of all, you're using the win32 API.


yes, i know, and i ask about win32 API :)

i tested your "madRes", and it works just perfect ;)

but i want to know how to change the icon without using your (greate) unit ;)

i want to know how to use these APIs (of resources)

i hope u understand my question.

i asked here, because i know that you (and maybe other members here) have a good experience with this APIs .

and sorry if i posted this question in a wrong place.

btw, i read all the help about these APIs, and then tried to implement it in this code, but as you see the code didn't work, maybe theres a mistake or more, maybe theres lost steps....

any help, and any hint is very appreciated..

thank you in advance.
beginner
 
Posts: 5
Joined: Tue Apr 04, 2006 9:58 am

Postby madshi » Fri Jun 30, 2006 6:33 am

The source code of madRes is freely available. So you can check yourself how LoadIconGroupResourceW works inside.
madshi
Site Admin
 
Posts: 9431
Joined: Sun Mar 21, 2004 5:25 pm


Return to madBasic

Who is online

Users browsing this forum: No registered users and 1 guest

cron