Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 1 of 1 total
Thread Elevate Web Builder 3 Beta Build 17 is Now Available
Thu, Sep 17 2020 3:02 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.


Email timyoung@elevatesoft.com

Build 17 is now available on the web site in the EWB beta downloads area.

I ran out of time on adding the invoicing application and had to go with a lighter contact form application that is used with the native web server modules to show how to expose a database API via a native web server module.  So, in total there are 3 example applications: the Music Collection, Photo Album, and Contact Form applications.  All of these example applications are responsive and work in both desktop and mobile environments, and they all show how to handle session authentication (anonymous, for demonstration purposes).  I will most likely be doing a video in the future that shows how to upgrade these applications to use user profiles and offer authentication beyond that provided in the EWB 3 Web Server (for example, with very large sites that need to authenticate against a database or external source instead of the EWB 3 Web Server).

Because of the changes to the example applications and example data, you should delete everything in this folder *before* installing Build 17:

C:\Users\<UserName>\Documents\Elevate Web Builder 3

Also, after installing Build 17, be sure to re-run the Install Example Applications option from the Help menu.  That will ensure that all of the databases, applications, modules, and requests that are needed for the examples are installed and available.

You'll also need to recompile any native web server modules with Build 17, as there have been further changes to the way that the modules interact with the EWB 3 Web Server.  Also, the TEWBDatabaseAdapter/TEWBDataSetAdapter components and the database API for the native web server modules have completely changed and are now REST-ful (see below about the video about this).

I will be doing videos tomorrow and over the weekend on:

1) Upgrading to EWB 3: this will be a comprehensive video that explains all of the changes and how to deal with them.  This will be especially important for those using the native web server modules for database APIs.

2) A tour of the example applications, how they work, and what they show you how to accomplish with EWB.

Some notes:

- You can now use relative paths in the compiler search paths for projects.  This makes replacing interfaces/components/library code much easier to deal with.  Two of the example applications use a relative path for the custom interfaces used with the example applications.

- You now ability to assign HTML forms to TServerRequest components so that you can get start/progress/completion events for file uploads.  This also allows you to slot HTML form submittals into the TServerRequestQueue component so that such requests can be retried, etc.  This caused a breaking change in how the TPersistent Assign method works: if you don't override the Assign method in your TPersistent descendant class, then EWB will call the TPersistent AssignTo method to see if the destination of the assignment can handle the assignment (similar to Delphi).

- There is now GZip/ZLib Deflate functionality in the streams support for server applications, as well as in the web server itself.  The web server now, by default, will GZip any textual content that it sends as a response if the client user agent accepts gzip or deflate content encoding.  This gets most EWB browser applications down to around a 200-300K total transfer size for both the JS/HTML, which should help a lot for mobile applications.  There is also a new THTTPServerRequest (the base class for server request instances passed into server application request handlers) method for determining if the user agent will accept a given type of content encoding:

        function AcceptsContentEncoding(const ContentEncoding: String): Boolean;

You can use this in your server applications to determine if it is safe to return content encoded with GZip/Deflate encodings.

- There is a new THTTPServerRequest RequestPathComponents property that can be used by server applications to easily examine the various components of the request's URL path.  This is a nice-to-have when implementing a REST-ful API, and all of the example applications use this property.

- You can now reset properties in the component inspector by using the Ctrl-R key combination, which is nice when you want to reset the background, shadow, etc. of a control to its default values.

- There's a new TFrame control that is a non-scrollable, auto-sizable, TFormControl-descendant that can be used for embedded "panels" in applications that can also be manipulated in the IDE.  Both of the example applications use this control.  This is kind of a stop-gap measure until proper support can be added to the design environment for creating template controls for lists, etc.

- You can now specify the name of the icon font to be embedded with the application in the project build options.  This allows you to substitute something like the Google "Material Icons" font for the default EWB Icons font.  Both of the example applications do this.  The command-line compiler was modified and a new parameter was added so that you can also specify the name of the font.

- You can now hook into the mouse/touch capture process for most controls using OnCaptureStart, OnCapturing, and OnCaptureEnd events.

- The TMouseWheelEvent method type has changed from a procedure to a function that returns a Boolean value, so be sure to add an assignment statement to any defined OnMouseWheel event handlers so that they return a Boolean True or False.  This Boolean result value determines if the mouse wheel event is considered handled or not.  Once a mouse wheel event is handled, it will not continue to propagate to parent controls.  This is useful for controls like the TImage control that may want to use the mouse wheel for operations like zooming instead of scrolling.

- You can now manually initiate application modality via the new TSurface.StartModal/EndModal methods.  This is nice when you want to simply show status in a label, etc. instead of a dialog, but still don't want the user to be able to click on anything or cause another operation to start.

There's also a ton of bug fixes in both the RTL and IDE, including a fix for a long-standing issue with OnMouseEnter/OnMouseLeave issues with composite controls (Matthew Jones, I think you've had issues with this one), as well as code assistance fixes and other misc. fixes.  There were a lot of changes in this build, so please forgive me if I missed something, and feel free to post in this thread anything that is missing/changed that I didn't mention.

Also, I ran out of time on getting a full Material Design set of control interfaces implemented.  Both the Music Collection and Photo Album example applications implement a partial set of Material Design control interfaces, but not the entire set.

Going forward, there are only a few minor improvements left to implement (user-defined, persistent session parameters is one of these, to allow for variable substitutions for certain database properties like the database name), along with the final documentation updates.  I'm about half-way through the component reference updates, and then I still need to do the full documentation changes.  Luckily, though, the full documentation changes are mostly aesthetic, except for a few areas.  I'm pretty sure that I can get everything wrapped up by the end of the month, but we'll have to see what crops up with testing in this latest beta build.

Thanks !

Tim Young
Elevate Software