改变ICON的问题(50分)

  • 主题发起人 主题发起人 一剑飘雪
  • 开始时间 开始时间

一剑飘雪

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么下面二段改ICON的代码都改不了。<br>我只是想把一个*.ICO写到一个EXE程序里面去,但为什么每次写的时候都写不进去。请教解答。谢谢!<br><br>var<br> &nbsp;Handle: THandle;<br> &nbsp;P: Pointer;<br> &nbsp;FileStrSize: Integer;<br> &nbsp;FileStr, FS: TFileStream;<br>begin<br> &nbsp;FileStr := TFileStream.Create(PChar(Edit1.Text), fmOpenRead);<br> &nbsp;FileStrSize := FileStr.Size;<br> &nbsp;GetMem(P, FileStrSize);<br> &nbsp;FileStr.Read(P^, FileStrSize);<br><br> &nbsp;Handle := BeginUpdateResource(PChar(Edit2.Text), false);<br> &nbsp;UpdateResource(Handle, RT_GROUP_ICON, 'MAINICON', &nbsp;LANG_SPANISH , p, FileStrSize);<br> &nbsp;EndUpdateResource(Handle, false);<br> &nbsp;FreeMem(P, FileStrSize);<br> &nbsp;FileStr.Free;<br>end;<br><br><br>var<br> &nbsp;Ico: TIcon;<br> &nbsp;Stream : TMemoryStream;<br> &nbsp;hInst: THandle;<br> &nbsp;ptr : Pointer;<br>begin<br> &nbsp;Ico:=TIcon.Create;<br> &nbsp;Ico.LoadFromFile(Edit1.Text);<br><br> &nbsp;Stream := TMemoryStream.Create;<br> &nbsp;Ico.SaveToStream(Stream);<br> &nbsp;Ico.Free;<br> &nbsp;getmem(ptr, Stream.size + 1); &nbsp; //函数是用来在堆中分配指定数量的内存的<br> &nbsp;try<br> &nbsp; &nbsp;Stream.Seek(soFromBeginning, 0);<br> &nbsp; &nbsp;Stream.read(ptr^, Stream.size);<br> &nbsp; &nbsp;hInst := BeginUpdateResource(Pchar(Edit2.Text), False);<br> &nbsp; &nbsp;if hInst &gt; 0 then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;UpdateResource(hInst, RT_GROUP_ICON, 'MAINICON', 1031, ptr, Stream.size);<br> &nbsp; &nbsp; &nbsp;EndUpdateResource(hInst, False);<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp;finally<br> &nbsp; &nbsp;freemem (ptr, Stream.size + 1);<br> &nbsp; &nbsp;stream.Free;<br> &nbsp;end;<br>end;
 
以下是我又写的一个,但还是不能换*.ico &nbsp; 第当我换的时候程序的ico就没了,我的*.ico文件也没有写上去,请教高手。急。在线等待<br><br>var<br> &nbsp;Icon: TIcon;<br> &nbsp;Handle: THandle;<br> &nbsp;MemStream: TMemoryStream;<br>begin<br> &nbsp;Icon := TIcon.Create;<br> &nbsp;Icon.LoadFromFile(Edit1.Text);<br> &nbsp;MemStream := TMemoryStream.Create;<br> &nbsp;Icon.SaveToStream(MemStream);<br> &nbsp;Icon.Free;<br><br> &nbsp;Handle := BeginUpdateResource(Pchar(Edit2.Text), True);<br> &nbsp;UpdateResource(Handle, RT_ICON, MAKEINTRESOURCE(RT_ICON), 0, @Icon, MemStream.Size);<br> &nbsp;EndUpdateResource(Handle, False);<br> &nbsp;FreeResource(Handle);<br>end;
 
放到资源文件里面去~~~
 
要改ICO的那个程序不是我写的.我也没有源码,所以不能放在资源文件里面.
 
申请一个TICON,然后CREATE,然后给申请的ICON赋值,然后APPLICAN或者FORM直接可以用了。我是这样做的。
 
倒,没看到,用API函数吧,SETWINDOWLONG
 
楼上兄弟: &nbsp;会不会把程序越做越大呀! &nbsp;嘻...<br><br> &nbsp; 我是想把原来程序的那个ICON给换掉.
 
后退
顶部