Thread overview
Re: DWT Forms Icons
Sep 08, 2008
Tim M
Sep 08, 2008
torhu
Sep 08, 2008
Frank Benoit
Sep 08, 2008
torhu
Sep 08, 2008
Frank Benoit
September 08, 2008
Frank Benoit Wrote:

> Tim M schrieb:
> > Hi I decided to port one of my programs from dfl to dwt and haven't yet been liking it one bit. My program went from 339K to 2.81M, the code is much more complex, at lot more imports and takes longer to compile its taken me a long time and a lot of confusion and I still don't see the point of listeners when in dfl all i have to do is: myButton.click ~= &generateKey; It seems like a step backwards or wrong direction for me and I spent nearly a whole day trying to get my icon display.
> 
> I think its worth that.
> What you get with DWT is cross plattform and a fast growing code base.
> That would not be possible if those functionality would be implemented
> by that few people. Porting is a much easier task.
> 
> Instead of implementing listener classes you can use the dgListener
> template function.
> myButton.addListener(DWT.Selection, dgListener( (Event e){ /+ ... +/ });
> 
> In comparison to a direct delegate the dgLister has the advantage that it can be curried with additional arguments.
> 
> myButton.addListener(DWT.Selection, dgListener( (Event e, MyType myval
> ){ /+ ... +/ }, val);
> 
> 'val' is now stored in the internal generated Listener class and passed to the delegate as the myval argument.
> 
> > Anyway I compile the program and link it with the resource and the icon is visible on the taskbar but i couldn't get it to display in the top left corner of the app. I've tried a lot and I think it has something to do with dwtx.jface.resources but i couldn't figure it out. Please help.
> 
> With resource you mean a windows resource?
> DWT does not make use of that resources. The Java original does not
> compile to exe files, so there are no linked resources.
> To set the window icon see Shell.setImage(s)
> 
> For more help, please post a reduced simple compilable example code (perhaps screenshot) that demonstrates the problem.

I found the shell.setImage really fast but I couldn't figure out where to get the image. In the examples I saw an import statement with an image file that is cast. Do you know of any better way?

Also I really hope dfl and the other gui toolkits dont die (thats if they are still alive right now). AFAIK swt is not gc handled memory which is not something you'd expect for something so big, clunky and slow.

September 08, 2008
Tim M wrote:
> I found the shell.setImage really fast but I couldn't figure out where to get the image. In the examples I saw an import statement with an image file that is cast. Do you know of any better way?
> 

I think there's a way to get the resource data for the icon by using the Windows API, but I didn't bother to figure it out.  I just used the import("icon.png") trick.  Of course, that means you have to include the image file twice in the execuable...

Something like this is what I've been doing:

---
shell.setImage(loadImage("icon.png"));

Image loadImage(char[] name)()
{
	return _loadImage(cast(byte[])import(name));
}

Image _loadImage(byte[] data)
{
	return new Image(Display.getDefault, new ByteArrayInputStream(data));
}
---
September 08, 2008
torhu schrieb:
> I think there's a way to get the resource data for the icon by using the Windows API, but I didn't bother to figure it out.  I just used the import("icon.png") trick.  Of course, that means you have to include the image file twice in the execuable...

Why do you need to load it twice?
If I use shell.setImage it is visible in both, the taskbar and the
window title. I do not use/link the icon as a windows resource.
September 08, 2008
Frank Benoit wrote:
> torhu schrieb:
>> I think there's a way to get the resource data for the icon by using the
>> Windows API, but I didn't bother to figure it out.  I just used the
>> import("icon.png") trick.  Of course, that means you have to include the
>> image file twice in the execuable...
> 
> Why do you need to load it twice?
> If I use shell.setImage it is visible in both, the taskbar and the
> window title. I do not use/link the icon as a windows resource.

I don't think Explorer will pick it up unless it's the first icon resource in the file.  So it won't be used on the quick launch bar and the desktop, etc.

If someone spends some time on figuring out how to load icon resources into a DWT Image object, I'll be happy to switch to using that. But the Windows API can be a pain to use, so I didn't think it worth it when I had a look at it a while back.
September 08, 2008
torhu schrieb:
> Frank Benoit wrote:
>> torhu schrieb:
>>> I think there's a way to get the resource data for the icon by using the Windows API, but I didn't bother to figure it out.  I just used the import("icon.png") trick.  Of course, that means you have to include the image file twice in the execuable...
>>
>> Why do you need to load it twice?
>> If I use shell.setImage it is visible in both, the taskbar and the
>> window title. I do not use/link the icon as a windows resource.
> 
> I don't think Explorer will pick it up unless it's the first icon resource in the file.  So it won't be used on the quick launch bar and the desktop, etc.
> 
> If someone spends some time on figuring out how to load icon resources into a DWT Image object, I'll be happy to switch to using that. But the Windows API can be a pain to use, so I didn't think it worth it when I had a look at it a while back.

ok, that one.

Yes, it is probably really not worth the trouble just to save a few hundred bytes for the extra .ico .