EZGUI 5.0, the next generation!

I am very excited about EZGUI 5.0 and I look forward to when it will be ready for official release.

A lot of work has gone into EZGUI 5.0 and it truly is the best version of EZGUI yet.

You have to appreciate what goes into developing a tool like EZGUI. I do a lot of research into the Windows API to make sure EZGUI runs flawlessly, even on different versions of Windows. I test my code again and again until I get it right. Windows is not always very forgiving, but I just stick with it. There is no way to produce software that does not have at least a bug or two, but I do my best to make my software “sold as rock”. It is amazing when you think about it, how many commercial applications will crash periodically. I have brought down Internet Explorer more than once. True I do push Internet Explorer to the limits, often having a dozen tabs with a web page on each displayed. It may simply be “par for the course” when it comes to software.

EZGUI does some amazing things and it has a great deal of complex code in it, but it has remained quite stable and I am happy about that. Often I have to solve problems which are because of bugs (or poor design) in Windows itself. For example, recently I was working on the new Visual Bookmark feature in the Visual Designer.

 

The Designer needed to be able to do a screenshot of the current Form and then display a scaled version of it in the Visual Bookmark drop down list. I had added a new command in the runtime (EZ_CopyForm) which internally sent the form the WM_PRINT message to draw the form on a bitmap. The problem was that Windows has never implimented WM_PRINT properly. Likely it uses the EnumChildWindows API internally which does not return the child windows in the proper zorder (depth in relation to each other). This means that if any controls on the form are layered on top of others, you may get a very bad image with some controls appearing to be missing.

So what was I to do ?

I did two things. I added to the command (EZ_CopyForm) the ability to copy directly from the screen (window DC) the image and also added another option to use WM_PRINT, but internally EZGUI impliments its own proprietary WM_PRINT code which handles the zorder properly. It works better than WM_PRINT in the operating system does, but is still not perfect. It turns out Windows will not draw a RichEdit control properly when done through WM_PRINT.

The point is that building a GUI engine like EZGUI 5.0 requires a lot of research to solve problems with the Windows API which are not always easy to solve. Thats my job though and I take it seriously.

There are a lot of exciting new features which I personally like in EZGUI 5.0. My favorite may be the new GLCanvas control (OpenGL). The 3D script language is very powerful. What is also very interesting is how I built it. The new control is actually a hybrid, which combines all the features of the EZGUI Canvas control with a 3D OpenGl engine on top. This was done using the new SuperClass engine. The superclass engine does far more than simply create a new window class which is a superclass. It provides a mechanism to make building the new control very much easier, even providing a mechanism to store instance based data, including strings (per instance of the control).

There are some exciting new graphic commands, even ones dealing with image rotation, alphablending, transparency and scaling. One feature I really like is the new image filter engine. EZGUI comes with 22 built in image filters and you can draw a Bitmap and at the same time impliment an image filter when drawing.

The new Designer has come a long way. Finally I added the ability to draw multiple controls at one time. This may not sound like a big deal, but it took a lot of work to get it right. First, all the features not possible to do with Powerbasic , which would require resorting to the Windows API to accomplish, become new features in EZGUI’s runtime engine. The designer is a 100% EZGUI application with absolutely no calls to the Windows API itself. EZGUI (runtime) does all the work. I had to add the ability to drag multiple drag rectangles to EZGUI’s drag and drop engine. One of the problems I saw was the screen updates can be a little messy when doing this, so I rewrote this part of the drag and drop engine. It literally does everything in memory and bitblt’s everything to the screen so it is seamless and flicker free. Now for a comparison, I tried another Visual Designer (freeware) and I tried dragging multiple controls. The drag rectangles were slow to update and they tended to lag behind the mouse cursor. I then tried dragging a couple hundred controls at one time and it was simply put “a mess”, really.  Now don’t be hard on the auther of that designer, since using the standard rubberbanding techniques, which most would use to impliment this,  you really can’t handle that many rectangles at one time. With EZGUI though I wrote my routines for optimal performance and the Designer can drag 400 controls (400 drag rectangles actually) around swiftly and cleanly with no lag time or messy redraw. The beauty of this is that this is built into the runtime, so EZGUI users can do the same thing in their applications. Imagine that ? You can build your own Visual Designer with EZGUI !

I really am excited about the new Visual Bookmark feature in the Designer. You can take a snapshot of a form you are working on at any time and it is added to the current bookmark list. You also get a visual snapshot as well added to bookmark drop down list. You can select any of the bookmarks at any time and go back to that state of the form. You can try multiple versions of your form until you get it right. You can even go into test mode at any time and not lose the bookmarks. The Designer automatically makes the first bookmark when you load a form, so you always can go back to the original design if you want to. The Designer can handle up to 200 bookmarks. The images alone to do that take about 80 megabytes of memory (so it is quick to retrieve them) if you use that many. The Designer is smart though and progressively builds the image buffer as you need more images, so it never users much more memory than the largest number of bookmarks you use. If you only use a few dozen bookmarks, the designer will use much less memory.

There is a lot to look forward to in EZGUI 5.0 Professional, so stay tuned for more info!