Thread overview
DWT Windows Load Icon from File/Program/Resource
Feb 25, 2017
JamesD
Feb 25, 2017
Jacob Carlborg
Mar 04, 2017
JamesD
February 25, 2017
I'm a hobbyist and new to the D language.  With a lot of help from various online resources, I finally figured out how to load an icon from:

  1. A file "icon.ico" (this was easy)
  2. A Program extension from the Windows registry, e.g. "*.inf" (harder)
  3. A linked resource from the exe itsself (very hard)

I learned how to add an icon to the exe with a compiled Resource file.
Now I can load this embedded icon as the shell icon.
And I don't have to distribute a separate ico file with  my exe.
I added a couple of simple bat files to compile with either dmd or dub.

This work can be found at:
  https://github.com/jasc2v8/dwt-support/tree/master/windows/example-load-icon

I hope this helps another newbie like me.
Constructive feedback is welcome.

February 25, 2017
On 2017-02-25 09:45, JamesD wrote:
> I'm a hobbyist and new to the D language.  With a lot of help from
> various online resources, I finally figured out how to load an icon from:
>
>   1. A file "icon.ico" (this was easy)
>   2. A Program extension from the Windows registry, e.g. "*.inf" (harder)
>   3. A linked resource from the exe itsself (very hard)
>
> I learned how to add an icon to the exe with a compiled Resource file.
> Now I can load this embedded icon as the shell icon.
> And I don't have to distribute a separate ico file with  my exe.
> I added a couple of simple bat files to compile with either dmd or dub.
>
> This work can be found at:
>
> https://github.com/jasc2v8/dwt-support/tree/master/windows/example-load-icon
>
>
> I hope this helps another newbie like me.
> Constructive feedback is welcome.

In D it's very simple to embed resources in the executable at compile time using string imports:

immutable data = cast(immutable(uyte[]) import("foo.ico");

Compile by adding the -J flag to point to the directory where the icon files are located:

dmd main.d -J./resources

Then I'm pretty sure there's a an API that takes a byte array and returns an image of some sort.

-- 
/Jacob Carlborg
March 04, 2017
On Saturday, 25 February 2017 at 19:58:17 UTC, Jacob Carlborg wrote:
> On 2017-02-25 09:45, JamesD wrote:
>> I'm a hobbyist and new to the D language.  With a lot of help from
>> various online resources, I finally figured out how to load an icon from:
>>
>>   1. A file "icon.ico" (this was easy)
>>   2. A Program extension from the Windows registry, e.g. "*.inf" (harder)
>>   3. A linked resource from the exe itsself (very hard)
>>
>> I learned how to add an icon to the exe with a compiled Resource file.
>> Now I can load this embedded icon as the shell icon.
>> And I don't have to distribute a separate ico file with  my exe.
>> I added a couple of simple bat files to compile with either dmd or dub.
>>
>> This work can be found at:
>>
>> https://github.com/jasc2v8/dwt-support/tree/master/windows/example-load-icon
>>
>> I hope this helps another newbie like me.
>> Constructive feedback is welcome.
>
> In D it's very simple to embed resources in the executable at compile time using string imports:
>
> immutable data = cast(immutable(uyte[]) import("foo.ico");
>
> Compile by adding the -J flag to point to the directory where the icon files are located:
>
> dmd main.d -J./resources
>
> Then I'm pretty sure there's a an API that takes a byte array and returns an image of some sort.

Very interesting, thank you!

Update: I expanded and renamed this project, now at:
https://github.com/jasc2v8/dwt-support/tree/master/windows/loadicon

The key takeway is the Win32 API LoadImage function.

Use to set the Shell icon from the program icon linked with icons.res in this exe file.