3
votes

I just received some artist rendered images of my Delphi Pro 6 application that I will use to overhaul the look and feel of it. The problem is of course that my application, like any other Delphi application, uses the VCL custom control library and those controls paint themselves and in a way that frequently isn't conducive to altering their look and feel. I also make heavy use of the open source JEDI JVCL library too.

If anyone out there has a some tips, articles, web pages or anything that talk about working from an image to reskin or overhaul a Delphi 6 application, I would appreciate knowing about it. It's a big application with tons of complex TFrame descendants and a heavy use of the JEDI VCL page control so switching over to a brand new component library isn't practical.

One idea I had that I have not tried out yet is to take each top level form and nestle it in another TForm by changing the current form's Parent property to the new TForm and setting the AlphaBlend property of the current form so that it is transparent. Then I'd set the new shell or host TForm's background to an image containing the new look and feel so that it bled through the transparent form. That approach seems kind of kludgy and I worry about resizing issues but that's the kind of technique that I'm wondering if is usable.

3
Not gonna work, WS_EX_LAYERED can only be used for top-level windows. So no alpha blend for child windows (which is what you'll get if you parent a form with an other).Sertac Akyuz

3 Answers

3
votes

Use a skinning library like VCLSkin or DevExpress Skins.

3
votes

Almost all skin-engines have their own skin-editors. So you just need to peek one (Chris Thornton have not mentioned AlphaControls and DynamicSkinForm). Then you need to give your artist that skin-editor, and ask him to redraw his skin with that tool.

0
votes

It sounds like your UI and business logic are tightly coupled. Its pretty common among RAD style development projects. You would do well to break this coupling. One of the many UI architectural patterns will help with this. I prefer MVP Passive View whenever possible as it moves all logic out of the UI into classes which can be tested in isolation. One of the other patterns may be more appropriate depending on the architecture of your application.

I'll be blunt. Decoupling the UI in an existing application is a tedious and sometimes difficult process. The payoff comes when you can freely change the UI with minimal changes to the logic behind it.