WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WindowsLinuxPHPWEBDEV - Browser code
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Stored procedures
New Diagram Editor control
The new Diagram Editor control really stands out among the main new features in version 27 .
This control allows you to include superb diagram creation and editing functionalities in your applications and sites without writing a single line of code: all these functionalities have been automated into one control.
What is a diagram?
A diagram is a "graphic representation of parts of a whole and their position in relation to each other".
A diagram can be used to represent structures, architectures, material infrastructure, plans, processes, mechanisms, unconventional flowcharts, ...
Diagram Editor control: main features
The Diagram Editor control includes rich, essential features:
  • preset shapes
  • custom shapes and images
  • image resizing
  • shape style: line, color, ...
  • advanced connectors between shapes
  • text input
  • ...
All these features, accessible to the end users of your applications and sites, are also available through programming.
Diagram Editor control: a true fully-fledged program
The Diagram Editor control is equivalent to a full program: it allows you to create diagrams without writing one line of code.
End users of your application or site can create, edit, save and print their own diagrams.
The control takes care of everything.
All types of diagrams are supported: logical diagram, flowchart, workflow, plan, IT infrastructure, process, vector graphics, electronic schematic diagram, mind map, ...

The Diagram Editor control can also be handled through programming.
Your application or site can create diagrams, and can edit or complement a diagram made by a user.
General overview of the Diagram Editor control
The Diagram Editor control has 4 main areas.
By default:
  • left: library of preset shapes.
  • top: toolbar.
  • right: modifier, to edit the selected shape.
  • center: diagram . The control is very easy to use.
Programmatically, or via the "7 tabs", you can hide one or more areas, customize the toolbar, load preset areas, ...
Diagram Editor control: preset (vector) shapes
Preset shapes are the "base" of a diagram editor.
The Diagram Editor control includes a set of preset shapes:
  • square,
  • rectangle,
  • triangle,
  • polygon,
  • diamond,
  • parallelogram,
  • circle, ellipse,
  • arrow,
  • dummy,
  • person,
  • star,
  • leaf,
  • window.
  • ...
The clipart provided with WINDEV and WEBDEV includes thousands of SVG images that can be used as "shapes" in the Diagram Editor control.
The Diagram Editor also allows you to create your own shapes.
Diagram Editor control: the links
The connectors between shapes are an essential feature of a diagram editor: users should be able to create their own connectors, and these connectors should automatically adapt to any shape in any position.
The Diagram Editor control connectors in version 27 include:
  • 2D or 3D aspect,
  • line style: thickness, type, color,
  • shape on each end,
  • straight or elbow connector,
  • connector with sharp angles,
  • connection point,
  • ...
Diagram Editor control: text
The Diagram Editor control allows entering text directly at the cursor position.
All the standard text formatting functionalities are included: font, size, color, alignment, opacity, in-place editing, ...
Diagram Editor control: end users can add their own preset vector shapes
The Diagram Editor control allows users to create their own preset shapes and import existing ones.
SVG shapes are supported, as well as PNG or JPEG images and photos.
It is easy to create libraries of shapes related to a professional field, furniture of a given brand, items available in a store, etc....
End users can create these elements or find them in your application.
Diagram Editor control: a code-friendly control
The Diagram Editor control allows end users to create, edit, export and print their own diagrams.
The Diagram Editor control also allows creating, editing, using and positioning shapes, connectors and text through programming.
The content of a diagram created by an end user can also be manipulated through programming.
This opens a wide range of possibilities.
Diagram Editor control: export to SVG and PNG
Diagrams can be exported as SVG or PNG images, using the toolbar.
Diagram Editor control: print
Diagrams can be printed via the toolbar or through programming.
The selected paper size is represented by a dotted line in the diagram editor, which allows you to position the shapes according to the type of print job.
Diagram Editor control: miscellaneous
  • WEBDEV and WINDEV use the same diagram format
  • A diagram can be saved in an HFSQL Memo item, which allows binding the diagram to a data source.
Diagram Editor control: programming with an array of shapes
In the code, the diagram is an array of shapes.
This array of shapes contains all the shapes and images of the diagram.
Each shape includes its coordinates and properties.
This makes it easy to edit a diagram, add shapes and images through programming.
All the functionalities of the Diagram Editor control are accessible in the code.
To add a shape to a diagram programmatically, simply add it to the array of shapes: the control will automatically display the shapes.
Of course, you can edit or delete a shape.
Native types to handle shapes
Version 27 includes the necessary WLanguage types to easily program the processes you want.
The Diagram native type allows you to handle the whole document.
The Diagram has many properties:
  • dimension
  • background color
  • grid
  • layout
  • zoom
  • ...
The native Shape type allows you to handle all the shapes with its numerous properties: X, Y, width, height, text, background color, opacity, shadow, array of links, ...
Other native types derive from the Shape type:
  • Rectangle
  • Triangle
  • Circle
  • Polygon
  • Image
  • Link
  • Shape that contains shapes
  • ...
All these types inherit the properties of the Shape type and have specific properties: radius, etc, ....
Diagram Editor control: new WLanguage functions
New WLanguage functions now allow you to create and handle diagrams through programming:
DiagramLoad, DiagramSave, DiagramToImage, DiagramToSVG, iPrintDiagram...
Diagram Editor control: new properties
New WLanguage properties are also introduced to define and configure diagrams programmatically:
Zoom, Gridlines, Show/Hide library, modifier and ribbon, paper format...
Diagram Editor control: new events
New events are introduced to manipulate diagrams programmatically.
They are added to existing events.
  • Click in the diagram
    In this event, you can write the code to create a shape at the click location.
  • Create a shape
    This event allows you to be notified when the user creates a shape.
  • Select a shape
    This event allows you to be notified when the user selects a shape.
  • Change shape
    This event allows you to be notified when the user changes a shape.
  • Right button
    This event allows you to be notified when the user presses the right mouse button. It can be used to open a custom context menu, for example.
  • Move a shape (Drag and Drop)
    This event allows you to be notified when the user moves a shape.
Add preset vector shapes: through programming
Developers can programmatically add their own preset shapes and images to the library of preset shapes included in the control: shapes related to a professional field, shapes of a given brand, ...
display-only mode, still interactive
A "display-only" mode allows you to display diagrams without pane or toolbar.
Shapes can no longer be moved or resized.
However, click events remain enabled, which allows to you program processes according to the user's clicks.
PDF Reader control: fill out, save and print forms
Highly anticipated new feature for the PDF Reader control in version 27: ability to fill out a form.
The completed form can then be printed and/or saved.
End users can directly fill out the form.
PDF Reader control: watermark added by the end user
In previous versions, it was already possible to insert a watermark on one or more pages of an existing PDF through programming or in the print preview.
In the PDF Reader control in version 27, end users can insert a watermark, choose the text and set the text position, angle, font, size, color and opacity.

Watermarks can also be added programmatically.
PDF Reader control: end user digital signature
PDFSign already allows signing documents programmatically.
In version 27, end users can sign PDF documents in the PDF Reader control.
The signature option can be found in the ribbon. End users must simply select the desired certificate.
PDF Reader control: multiple digital signatures with multiple certificates
In version 27, end users can also add their digital signatures to a PDF document that has been previously signed.
You can also use multiple signatures on PDF documents programmatically.
PDF Reader control: Signed PDF? Which certificate was used?
In version 27, a banner indicates if a PDF file is signed, and also indicates the number of signatures.
By clicking on this banner, end users can view the signature details.
Clear information

You can also determine if a PDF document is signed, and identify the certificate used, programmatically.
PDF Reader control: handwritten signature, handwritten initials
The PDF Reader control in version 27 offers end users numerous options for handwritten signatures:
  • draw signature with the mouse,
  • keyboard input with a cursive font,
  • image from the clipboard,
  • image from disk.
  • ...
Signatures can be resized and moved with the mouse.
You can set an image and a position for the initials on each page.
The signed document can be saved, printed, sent by email...

Handwritten signature in the PDF document
Handwritten signature in the PDF document
Generate black & white PDF documents
Besides the PDF Reader control, the new Grayscale and BlackAndWhite options of the iParameterPDF function allow you to generate a black and white or grayscale PDF documents.

PDF 1.7
In version 27, you can generate files in PDF 1.7 (ISO 32000).
Available Smart controls
Version 27 features 13 new Smart controls:
  • Tokenized email address input with autocomplete,
  • Form with non-blocking required input,
  • Drag & Drop rows in a Looper control,
  • WEBDEV PDF reader,
  • WEBDEV timeline,
  • Editable combo box,
  • Popup side panel,
  • Tokens as filters, with horizontal scrolling,
  • ...
Word Processing control : Link to external images, reduce document size
The Word Processing control now allows you to insert links to external images.
This avoids inserting the image itself, thus reducing the size of the document.
The image stored at the corresponding address is displayed in a preview resolution in the Word Processing document, and is printed in its actual resolution.
Word Processing control : Automatically detect HTTP links and make them clickable
URLs in a text are automatically converted into clickable links.
Spreadsheet control: open XLTS and XLTM files
XLTS and XLTM files are spreadsheet templates.
When an end user opens this type of file, a new workbook is automatically created.
Spreadsheet control: worksheet protection kept automatically
In an XLSX file, sheets can be protected to prevent users from making changes. These sheets are displayed, but cannot be modified.
A password is required to make any changes. Version 27 supports this type of protection.
Spreadsheet control: miscellaneous
  • The Excel Index function is available
New Chart control: radial bar chart
A new type of chart is introduced in version 27: the Radial Bar chart.
This type of chart is mainly used to compare objectives or market shares, or to illustrate a progress percentage (the full circle represents 100%).
A Radial Bar chart
A Radial Bar chart
New Chart control: Radial Bar chart programming
The Radial Bar chart control can be populated through programming just like any other chart control.
You can manipulate this type of chart using grRBxxx functions.
The Image Editor control allows you to include a full-blown image editor in your applications. End users can edit images and photos directly in your applications, without having to install and use third-party tools.
Image Editor control: blur an area
A new feature in the Image Editor control allows end users to easily blur an area of the image.
OCR on an image area: no programming required
In version 27, the Image Editor control allows end users to define an area on an image and run OCR to retrieve the text from that area.
This makes it possible, for example, to automatically retrieve a delivery or billing address, the contents of an order, etc, ...
In version 27, OCR processing requires zero code.
The user selects the area, and voilà, OCR does its magic!
Blur programming
You can blur part of an image or Image control programmatically.
To blur a control, simply use the new dBlur WLanguage function, passing the name of the control and the percentage of blur as parameters.
To blur an area, simply pass the coordinates of the area as parameters.
Image editor opening settings
The tool selected by default when the image is opened can be defined programmatically.
The default size of an image created in the Image Editor can be set programmatically.
Reminder: all the functionalities from the Image Editor control are available in the image editor itself
Developers have an image editor at their disposal in the environment. You are probably familiar with this tool.
The Image Editor control includes all the features of this image editor.
Developers benefit from all these features.
No need to duplicate your projects: one single environment
As you know, it is possible to use WINDEV, WEBDEV and WINDEV Mobile in the same environment.
Project elements are immediately shared between all 3 platforms: analyses, queries, reports, procedures, classes, code, ... Windows, pages, mobile windows are in the same project.
These elements open directly in the WINDEV environment.
This allows for easy maintenance and portability of a WINDEV application to mobile and Web, without having to import or duplicate elements of the project.
Reminder: you need a license of the corresponding software products.
Cross-platform components
In version 27, you can create cross-platform components for Windows, Linux, Web, iOS and Android.
This makes code sharing even easier.
improved <block> and <compile if> statements
In version 27, the <Block> and <Compile If> statements can be used in the declaration of a constant.
Your existing WINDEV projects can become websites or SaaS applications
Developers often need to transform Windows applications (or parts of applications) into dynamic websites or SaaS applications.
WINDEV and WEBDEV 27 are ideal tools for this purpose.
Import '.FIC' files
When a standard ".FIC" data file is dragged and dropped into the data model editor, its description is automatically imported without opening the import wizard.
Edit data file connections
The context menu now includes an option to edit the connections of one or multiple data files: practical feature.
Faster environment
The performance of the environment has improved in version 27 in many areas, such as:
  • Template updates.
  • Multi-core compilation, which optimizes the number of cores used.
  • Compilation after SCM updates.
  • Generation of WEBDEV pages.
  • ...
Store projects in a single directory
Until now, WINDEV, WINDEV Mobile and WEBDEV projects were saved in the My Projects, My Mobile Projects and My Sites directories, respectively.
To improve interoperability, in version 27, projects are stored by default in a single directory: My Projects.
When you install version 27, you will be prompted to store your existing projects in this unique directory.
Duplicate project names are managed by default.
Better style selection UI
The new style selection window is much more user-friendly.

The new layout makes it easier to find a style, for example.
The size of the style preview adapts to the type of control.
Also, the preview background color adapts to the current window (dark or light theme).
A context menu shows quick actions.
All style sheets are presented in a single window, which makes selection easier.
An icon is shown next to overridden styles.
Don't look any further for code: code treeview for windows, pages and reports
Version 27 includes a new pane to view all the elements of a window, page or report that contain code.
This allows you to see at a glance where the code is in a given element.
This tree appears in a new pane in the environment.
Integrated help: new pane with help for the current function

In version 27, the environment includes a practical help pane: this pane shows a summary of the function, the return value, the parameters, their type and purpose, as well as a link to the full help page and the professional forum.
You no longer need to leave the editor to access this essential information!
Alignments: additional controls supported
The alignment of elements in a window keeps evolving in version 27:
  • It is now possible to align controls from a template.
  • You can align control using a column of a Table control as a reference.
  • Non-movable controls are ignored.
Elements currently edited: they can be undocked (out of the environment)
Elements in edit mode can be undocked and positioned outside the environment.
When the element is moved back into the environment, the areas where it can be re-docked are highlighted.
In version 27, holding down the Ctrl key allows you to freely position this element.
Make sure you try this practical feature!
Image catalog: now with color!
Your favorite environment comes with a rich catalog of images and icons: tens of thousands of elements available at no extra cost!
Many images and icons come in black & white.
In version 27, a new option allows you to apply color to these elements.
Editor ribbon: open the right directory with a single click
Very often, developers need to open a file explorer directly on the project directory or the EXE (or generation) directory of the current configuration.
The "Folder" button in the ribbon allows you to do so with a single click!
Move controls in increments using the keyboard
You can move a control by a precise number of pixels, using the status bar in the environment: it is now possible to type "+10" or "-5" to move the control along the X or Y-axis.
  • Edit Calendar control styles more easily
  • Faster zoom (CTRL+ mouse wheel)
  • The image catalog is enriched with Windows 11-style icons
Table control: search scope
Table controls columns have a search Automatic Application Feature.
Starting with version 26, Table controls use a "Contains" search mode by default.
Older tables used a "Starts with" search, which was not as practical.
The static audit in version 27 identifies the old search modes.
It takes only 2 clicks to use the new search mode.
In a multithread process, access to variables must be protected by critical sections.
The dynamic audit identifies accesses to unprotected variables, thus preventing bugs and unexpected behavior.
Text overflow: Table column, edit control, radio button option, etc.
At runtime, the content of a control may overflow the view area.
It can be data displayed or the text of a control modified programmatically
The dynamic audit in version 27 reports all overflows detected at runtime.
Sprint management
A sprint or iteration is a development cycle.
In agile development, a project is divided into a set of sprints.
The Project Monitoring Center now integrates this method.
A sprint has a start and end date, and can contain requirements, tasks and incidents.
The different sprints are clearly represented.
A schedule with a Gantt chart layout shows the selected sprints.
Fix tracking: issues fixed by a developer between 2 dates
New statistic available: the number of tickets fixed by a developer between 2 dates.
A new chart shows the trend of new and fixed issues.
Of course, you can directly open each ticket from this list.
Messages related to a requirement/incident
A requirement can be created from a message in the integrated messaging system.
You can now follow and continue the discussion thread related to that requirement/incident.
Evolution of tags
Tags are used to classify incidents.
One or more tags can be associated with a ticket: "Minor bug", "Regression", "UI", ...
Tickets that don't have any tags are identified as "No tag", which makes it possible to find and classify them.
  • New incident management options have been introduced (ability to specify workarounds, multiple screenshots, new incident states, etc.)
  • The window interface is more intuitive.
Webservice documentation
The automatically generated technical documentation now allows editing information about the generated REST Webservices.
Potential improvements
In version 27, when the automatic UI audit detects a control or parameter that can be improved, an icon appears next to that element. By clicking the icon, you can view the details of the change to be made.
The real-time audit detects deprecated features used in your projects
The lifecycle of some projects span several years: this is quite common
Often, projects use features that date from the time the project was created (technologies that are now outdated or that have been replaced by more secure alternatives), options that have become useless, inefficient. Sometimes, it is necessary to enable more recent options.
Version 27 indicates the deprecated technology or the new features and proposes the technology to be used.
This may include, for example:
  • an HTML control still in IE6 mode (which prevents modern content from being displayed correctly)
  • a Chart or Shape control for which anti-aliasing has not been enabled
  • a Camera control in an old version
  • any control for which a new useful option is available but has not been enabled
  • a Combo Box control that can be made resizable or set to auto-size
  • enable autocomplete for controls with a file path input mask
  • ...
Version 27 also notifies you about more general problems:
  • a background image with transparency but without clipping (which consumes resources unnecessarily)
  • an Internal Window control that points to an Internal Window not found in the project
  • Binding to an non-existent item or variable
  • Control not compatible with the current configuration
  • Control too small to be touchscreen-friendly
  • Conflicting anchors
  • Multiple controls with the same logical name.
  • 2 OK or Cancel buttons in a window
  • ...
Better performance in the editor
Using controls with deprecated features can have a negative impact on the performance of your editors, slow down execution, generation, template updates, etc, ...
It is therefore a good idea to replace these old features with up-to-date alternatives.
Better performance at runtime
Old features slow down execution.
A simple way to increase the speed of your applications is to replace these outdated features.
Lighter and less memory-intensive pages
In WEBDEV in particular, using controls with outdated features or parameters can result in larger and more memory-intensive pages.
Updating your controls will significantly optimize size and memory consumption!
Environment variables: for sharing parameters
Environment variables have been introduced in the Software Factory.
An environment variable is a value that can be used in the configuration of action plans: a major version number, for example.
This avoids having to modify all action plans that use that value.
Set a computer to restart automatically
It may be necessary to reboot a computer at regular intervals, for example every 2 days: reset Windows memory, ...
In version 27, this can be scheduled in the Software Factory administrator.
The robot will complete the current action plan before restarting the computer.
Receive notifications according to the runtime mode
In Continuous Integration, success notifications can quickly clutter up your messaging system...
In version 27, you can select the type of messages you want to receive, for example only error messages.
Deployment on PCSCLOUD.NET
In version 27, a new action has been added to the action plan editor: Automatic deployment on the server.
You can define multiple PCSCloud deployment profiles.
Secure mode configuration: all actions blocked by default
In version 27, the User Groupware allows you to create profiles where all actions are blocked by default.
The administrator will have to authorize each action manually...
No more risk of unblocking a sensitive functionality by accident.
Get the details of the logged in user
gpwGetUserInfo, a new WLanguage function, gets all the accessible information about the current user in a single line of code.
Git: git clone command in the environment
You can open a GIT project directly from the environment.
No need to use a different tool!
Git: display the history in the environment
You can view the GIT history of an element directly in the environment.
No need to use a different tool!
Git: controls: reduce conflicts by reorganizing the source object
A WINDEV "Control" is a remarkably powerful and useful object.
In version 27, the internal format of the control has segmented properties, which reduces conflicts resulting from concurrent modifications of different elements: it is less likely that multiple developers try to modify the same segment.
Git: compare changes in the history
You can view the GIT history and compare changes of an element directly in the environment.
No need to use a different tool!
integrated image editor: take advantage of all the new features of the Image Editor control
The image editor integrated in the environment benefits from all the new features of the Image Editor control introduced in version 27.
search in the files to be extracted
WDMSG now allows you to perform searches in files to be extracted.
WDTRAD: multiple new features
WDTRAD boasts a new UI and new practical features:
  • Find/replace in the dictionary with regular expressions
  • Improved translation search: regular expression search before full-text search
  • Dictionary window: floating panes
  • New translation propagation option: to the whole document or to the elements currently displayed
  • Filters on search results are saved,
  • Multi-selection in search results: useful for bulk editing, ...
SCM: pane in the environment: who checked out what?
In version 27, the SCM includes a new pane that shows which elements have been checked out by the team, and which developer has checked out each element, all in real time.
This provides an overview of the work in progress at any given time...
This pane also allows you to send a message to the developer who checked out the element.
SCM: view revisions in the history of an element
The history window of an element displays the revisions.
In version 27, this window also displays the details of this revision: all the elements involved in the revision.
3 actions are available by clicking on an element:
  • view the history
  • view the changes in this revision
  • save the element to disk.
SCM : send a check-in request notification and show it in the environment of the recipient

In version 27, check-in requests sent to a developer appear directly in their environment!
If the environment is closed, the message is kept on hold and will be displayed when it is opened again.
SCM: "Checked out by" notification when opening an element

In version 27, when you open an element, a notification appears immediately if another developer has already checked out that element.
You won't have to find out later on when you try to make changes...
SCM: non-blocking history
You can view the history of an element without blocking the environment.
SCM: branches: improved merge
The methods for renaming project elements and managing relations between controls during a merge operation have been reviewed and improved.
In earlier versions, some changes had to be propagated manually between branches. Version 27 automatically propagates changes made to the following elements:
  • radio button and check box options
  • Table control columns
  • Looper attributes
  • Tab panes
  • order changes
  • relations between controls (controls contained in other controls)
  • ...
    You will be notified if a manual action is required.
SCM: miscellaneous
  • Easier access to multiple SCM repositories
  • Branch creation: the error report (if any) is displayed only after the branch has been created. minor errors no longer interrupt the branch creation process
  • Branch creation: shared files between projects are always managed
Multilingual messages: new technology
The current technology for managing multilingual strings is kept for compatibility.
A new technology has been implemented in version 27 in order to make things easier.
It gets rid of the numbering used for multilingual strings, along with its constraints.
AI now powers code completion
Code completion evolves in version 27.
The three most relevant suggestions appear at the top of the list.
These suggestions are the result of an AI learning process fed by a large number of projects.
The input history is also used to select these suggestions.
For example, if an int variable is declared, it will appear as a suggestion in the following call to a function that uses an integer.
Another example: after a line of code containing the HReadFirst function, HReadNext will appear in the suggestions as soon as you type "h"...
You will certainly enjoy this new code completion feature.
Completion on advanced types
The code editor offers code completion for all the arrays in advanced types.

3 new code wizards
Code wizards ask questions to generate the code or set the appropriate parameters.
3 new code wizards are introduced in version 27:
Switching to prefix syntax?: convert the existing code to prefix syntax with a single click
A new option in version 27 allows you to change the code of an existing project to prefix syntax.
Code editor: miscellaneous
  • The procedure documentation completion feature becomes more user-friendly
  • Code completion now also includes WLanguage keywords.
The color of the status bar of the environment reminds you that you are in a debug session!
In version 27, you will never forget that you are in debug mode!
The status bar of the environment changes color to orange during a debug session.
Simple, yet useful!

An integrated devops environment
WINDEV, WEBDEV and WINDEV Mobile version 27 form an increasingly cohesive DevOps environment.
You benefit from all the necessary functionalities to implement the DevOps approach: no more scattered, barely-compatible tools.
You have all the integrated tools to manage the DevOps methodology: lifecycle management, sprints, testing, continuous integration, deployment, continuous delivery, production, user feedback, ...
Don't look any further for code: code treeview for reports
The new feature that allows you to identify controls that contain code is essential in the report editor!
The code can be in different processes of the report.
Version 27 makes it easy to resume development on a report created years before or created by another developer.
Gantt report: even more details
Many users print Gantt charts.
Version 27 provides additional settings:
  • you can display week numbers
  • you can display an indication of the current day.
Report editor: blur or redact an area in a preview
The blur option has been added to the report viewer (report print preview).
The end user can blur or redact one or more areas, usually containing sensitive information, before distributing or printing the report.

Report editor: blur or redact an area through programming
The new Hidden property and the Blur and Redaction constants can be used to specify the name of the area or controls to be blurred or redacted when printing a report.
The level of blur can be adjusted.
Artificial Intelligence analyzes photos and images
Version 27 features an artificial intelligence engine to detect objects in images.
The new aiNeuralNetworkModel and AIDetect, functions, as well as the AIDetectModel, and aiImageResult, WLanguage types, allow for easy programming.
82 default objects + your own objects
Note: we are not objects, sure, but the concept of "object" also includes living beings.
82 objects are included as standard: face, human being, dog, cat, table, car, license plate, ...
You can define other objects to be detected. In this case, you will need to provide the object recognition model.
There are 3 common uses for the standard list of objects:
  • detect all objects in the image
  • detect a given object in the image: all dogs, all cars, all license plates...
  • detect a given list of objects.
aiImageResult returns an array of AIDetect containing the type of object, the coordinates of the polygon that contains the object and the confidence level.
On the other hand, code that uses custom models returns a matrix that depends on the provided model.
Usage example
There are many examples of the use of automatic object detection:
  • Blur an object automatically: face, license plate...
  • Detect a face in a profile picture
  • Crop a face
  • Count vegetables automatically
  • Classify images
  • Count
  • ...
Multithreaded compilation: even faster
The multithreaded compilation mode introduced in the previous version significantly improved compilation times.
Version 27 is even faster, as it uses all available cores by default.
Compilation and generation, select number of cores
As presented above, in version 27, multithreaded compilation uses all available processor cores by default.
You can specify the number of cores to be used, which allows you to tune performance, handle special cases, and allow other processes to continue to run at reasonable speed.
"open" functions: optional (named) parameters
The Open WLanguage function uses a variable number of parameters.
To avoid entering all the parameters, it is now possible to name the parameters and enter only those that are used.
New /= and *= operators
The /= and *= operators are introduced in this version.
Just like the += and -= operators, they simplify source code.
Comments in the middle of a line of code: between /* and */
A new way to comment code is now available.
/* indicates the beginning of the comment, and */ indicates the end of the comment, which can span over multiple lines.
This syntax also allows you to comment out a section of code in the middle of a line!
IF Customer. Email <> "" /* _et_ customer.VIP = true */ THEN
Multiline strings defined by quotation marks " "
Version 27 supports the " (quote) syntax, to make entering multiline strings easier.
Lambda calls, Getter and Setter: optimizations
In version 27, lambda calls, property getters and setters are faster.
N++ and ++N, N-- and --N
You already know the difference between the ++ operators placed before or after the variable.
N++ increments the value after evaluating the expression, whereas ++N does it before.
That changes everything!
In version 27, both syntaxes are available: ++ and --
Regular expressions: find and replace
Regular expressions are a very powerful concept, and allow for very concise code.
In version 27, regular expressions are even more powerful.
You can search for and even replace a string in another string, using a regular expression!
All in one line of code.
Two new WLangage functions are also introduced: RegexSearch and RegexReplace.
Luhn algorithm: verify or calculate the check digit
The Luhn algorithm is used to calculate the check digit of a credit card number, and to detect false numbers.
Two WLanguage functions are introduced in version 27 to calculate and verify this check digit: LuhnCalculate and LuhnCheck.
Password security: PBKDF2 hashing
PBKDF2 is a very powerful hashing algorithm.
Its main purpose is to securely hash data, especially passwords.
This type of hashing is also used to obtain a series of derived keys (passwords) from a password.
The HashString and HashFile now accept the new PBKDF2 constant, which expects the salt, number of iterations and key size as parameters-.
Handling html documents through programming: useful improvements
The WLanguage functions used to handle HTML documents are already very powerful.
Version 27 includes new properties that further simplify code:
  • The Index property is used to get the index of an HTML node.
  • The Parent property gets the parent of a node
The new HTML WLanguage functions are useful as well:

INIWrite no longer needs NumToString
The INIWrite function only accepted strings as parameters.
Starting with version 27, INIWrite accepts parameters of type int, real, boolean, etc.
Prefix syntax not used: ability to display a programming standard error
When the programming standard of a project defines the use of prefix syntax (control.function) as mandatory, a programming standard error can be generated at compilation time.
New compilation directive
A new compilation directive allows you to define a specific mode (32-bit or 64-bit) for the compilation phase.
This is especially useful when using external APIs that only work in one mode, either 32-bit or 64-bit.
Blurring an area of an image
The new dBlur WLanguage function blurs a rectangle defined by coordinates passed as parameters.
A Gaussian blur is applied.
The radius of the blur is passed as parameter.
Zip compression functions: clearer error messages
The error messages from Zip functions are more precise and allow a quicker understanding of the problems that may occur.
EncryptStandard function: pass the initialization vector as parameter
The EncryptStandard WLanguage function manages all the encryption parameters automatically.
In some cases, the encryption initialization vector is imposed by the device the application communicates with.
Now you can pass this initialization vector to the function as a parameter .
  • The API description type now supports 1 and 2-byte integers, both signed and unsigned.
  • It is now possible to edit an image's Exif data
  • 32-bit applications can also access the 64-bit Registry, and vice versa.
Webservice: force HTTP2
There are 2 HTTP standards: http1 and http2.
When calling a server, the client and server "negotiate" to agree on the protocol version to use.
However, some servers use only one standard: http2.
Version 27 allows you to force the use of http2.
Soap header: add XML nodes
You can add a node to a SOAP web service header with the new SOAPAddHeader function.
HTTP delete request
In some cases, Delete HTTP requests require passing data.
In version 27, you can pass this data.
New functions: JSONToXML and XMLToJSON
In version 27, the new JSONToXML and XMLToJSON WLanguage functions allow you to automatically convert one format to the other.
DocJSON is JSON = fLoadText(JSONFile)
DocXML is xmlDocument
JSONXMLConverter, a new WLanguage type, opens new options to configure and customize the conversion process: conversion of XML attributes, namespaces, empty tags...
Faster access to structure members and members of type array: 30% faster
When aggregating arrays (members of type object), you can access structure members 30% faster in version 27.
The same applies to members containing arrays of objects.
This is a major advantage in projects where Object Oriented Programming is mainly used.
Access properties faster
In version 27, the access to properties is faster. An improvement of over 20% was observed.
Polymorphic "FOR EACH"
You can loop through an array of objects that contains derived classes, taking into account only the objects of a given class: it's a polymorphic FOR EACH statement.
arrVehicles is array of CVehicle
//Calculate total number of packages shipped
TotalPackagesShipped is int
FOR EACH clTruck OF TYPE Truck OF arrVehicles
TotalPackagesShipped += clTruck.PackagesShipped
Code the equality and comparison operators more easily
Coding the and < and > operators is easier in version 27.
New compilation directives allow you to declare the members to be compared as well as the order of comparison.
GLOBAL procedure CompareVehicle(Car1, Car2)
OOP: miscellaneous
  • You can set the default comparison operator.
  • The <Useful> and <ForceDestructor> attributes can now be used with classes.
IOT: Bluetooth Low Energy (BLE) functions
Bluetooth Low Energy reduces the power consumption of the device.
This protocol is now supported in WINDEV, in addition to WINDEV Mobile.
Python: Native Python calls in WLanguage
You can now call Python code natively from WLanguage, just like .Net assemblies, SOAP web services, etc, ...
Importing the .py file into the environment allows the code editor to automatically recognize all the functions of the .py script.
Each function in the script is then considered as a native WLanguage function.
The Python engine is initialized using the PythonInitialize function.
// == WLanguage code ==
sResult is string
sResult = solver("3x**2-2x+5")
// == Python code ==
from sympy.solvers import solve
from sympy import sympify
def solver(equation):
return str(solve(sympify(equation)))[2:-1]
For more details, see:
Faster and more memory-efficient queries
HFSQL 27 improves the performance of different types of queries.
"Full scan" queries containing dates are 30% faster.
Queries with SQL "TOP", "BOTTOM" or "TOP/BOTTOM" clauses use much less memory.
Transactions by steps: set savepoints to split transactions into smaller steps
Need to nest transactions?
You can use savepoints to roll back to an intermediate point of the transaction.
The transaction will be divided into smaller parts.
During the transaction, the HTransactionSavepoint WLanguage function allows you to define and name a savepoint.
To undo the part of the transaction after this point, simply use HTransactionRollbackToSavepoint.
You can set multiple savepoints in the same transaction.
New "file alias" type to simplify programming
Aliases have always been available in HFSQL.
An alias allows you to perform one or more iterations on a file already in use without affecting the current iteration(s).
The use of aliases is simplified in version 27.
Simply write:
Customers2 is Alias of Customers

and that's all there is to it!
In version 27, HExportJSON can also be used to export the data file or query to a JSON type in WLanguage, no longer only to a file on disk.
Stored procedures: return records or arrays of records
A stored procedure can return records or an array of records.
Programming is much more... structured.
Server replication: limit repetitive notifications
When the connection to the server cannot be established, a message is generated.
The number of server connection error notifications is limited so as not clutter up your inbox with the same message.
Install assisted universal replication on your own application server, in Windows and Linux
Universal Assisted Replication can now also be installed on a WEBDEV Application Server. This server can run on Windows or Linux.
Advanced Encryption: AES-192 and AES-256
The U.S. National Security Agency (NSA) requires at least AES-192 for top secret information.
HFSQL 27 supports both AES-192 and AES-256.
  • Now you can rename one or more servers in a Server Replication.
Security: "password" item without stored password (hashed/salted password)

In version 27, a new advanced type of HFSQL item is introduced: the Password advanced type.
This new type of item does not store the actual password.
The password entered by the end user won't be stored as is.
This means there are no chances of hacking into the database to obtain this password.
How is this possible?
Before being stored, the password will be both salted and hashed.
Salting consists in adding a random string to the password. If two users enter the same password, their salted passwords will be different.
This salted password will then be hashed, making it unidentifiable.
The result of these irreversible operations is stored in the database, instead of the original password.
Attackers cannot cannot reverse engineer the password from the result of these operations, but you can still check if a password matches the original one. The password cannot be read, but it can be compared.
You can configure the type of hash, result length and number of iterations.
With this new type of item, hackers can no longer steal passwords by accessing the data file.
How to determine if a password is valid
To determine if a password is valid, simply compare the string entered and the content of the Password item (using the = operator).
Since WLanguage is a 5GL, it recognizes the types of the operators and automatically performs the necessary operations. No special programming required!
All related WLanguage functions automatically adapt to this particular type of item.
It supports the Null value and cannot be defined as index in the data file.
The LastCheckDate property returns the date the password was last written to the data file.
2 new SQL functions
2 new SQL functions for resuming transactions are introduced in version 27.
ROLLBACK TO SAVEPOINTRolls back all actions performed within the transaction since the savepoint was established.
SAVEPOINTDefines and names a new savepoint within the current transaction.
Sql syntax: [% %] to replace a variable with its value
SQL queries written in the code accept a new, useful syntax: [% variable_name %].
At runtime, the variable name between "%" characters will be replaced by the value of this variable.
This avoids having to declare and assign a value to a parameter.
HFSQLDrive: support for stored procedures
In version 27, HFSQLDrive supports stored procedures.
This optional functionality will be available early next year.
Improved automatic modification of data files (SDD)
In version 27, HFSQL Cluster improves support for automatic data modification:
  • Links
  • Secure files
  • ...
Miscellaneous improvements
Rename servers
HFSQL Spare is a near real-time server backup solution.
Version 27 allows you to rename the spare server.
Simply enter the new name in the HFSQL Control Center.
Non-blocking data file reindexing
The HFSQL Control Center boasts many practical improvements.
In particular, the HFSQL Control Center is no longer blocked by data file reindexing requests.
This is very convenient.
Transaction savepoint
The Native Oracle and MySQL Connectors now support transaction savepoints.
FOR EACH loops with a condition on an item: higher speeds
FOR EACH loops that use a condition are faster with Native Connectors in version 27.
Selection of items: search icon
The treeview mode in the main window of the query editor now includes a search icon.
This gives you the ability to select items more quickly.
A search icon is also available for output items.
Chorus pro, to invoice the French government: new APIs
In France, electronic invoicing has become mandatory for invoicing government services.
The French government has set up the Chorus Pro system to submit and monitor invoices. It is the tool for managing the expenditure and non-tax revenues used by French government services.
All companies must use Chorus Pro to send their invoices to the French government services.
Version 27 takes into account the latest changes to the Chorus Pro APIs and protocols, and makes it easier to automate the invoice submission process.
Bitcoin input mask
A new input mask is introduced in version 27: the Bitcoin input mask.
This mask allows you to enter values in the unit of your choice: BTC, mBTC, Satoshi.
Telemetry allows you to collect and aggregate personally-identifiable or anonymous information on how your applications are used: choice of selected menus, functionalities used, duration of processes and queries, possible bugs, use time ranges...
Telemetry also allows you to identify the OS versions and hardware configuration of end users, which is very useful, especially for software publishers.
Telemetry evolves in version 27.
Copy/paste custom widgets
Widgets can be used to display data retrieved via custom metrics.
In version 27, you can easily create new widgets from existing ones.
Easy access to unit tests from the code header

It is now easier to create unit tests: you can do so directly from the code header.
Additionally, if a window contains unit tests, they now appear in the header and can be started directly from the code editor.
This encourages developers to create and run tests, thus improving code and application quality.
Stop on TestCheck and automatically go to the iteration that causes a bug
A given test can be run with hundreds or thousands of different data sets (iterations).
The TestCheck WLanguage function allows you to make sure the result of a test is valid.
In version 27, when TestCheck encounters an error, the test stops automatically in the debugger on the current iteration: you will know exactly which dataset was used for the test (current iteration), making debugging easier.
Automated internal component test
In version 27, you can set automated tests for internal components.
Monitor S.M.A.R.T. status of hard drives
In version 27, the Monitoring Robot also monitors the physical status of hard drives.
An alert is generated if a possible error is detected.
WEBDEV cluster monitoring
In version 27, the Monitoring Robot also monitors WEBDEV clusters.
An alert is generated as soon as a problem is detected.
SCMDrive: connection to control centers
SCMDrive can now connect to the Control Centers.
In version 27, the Monitoring Robot can send alert messages to users registered in SCMDrive.
Manage secure SMTP servers
In version 27, you can use secure SMTP servers (ports 465 and 587) to send alerts.
2 new functions for Redis databases are introduced.
RedisSetChanges the value of a key on a Redis server.
RedisGetGets the value of a key from a Redis server as a string.
And numerous other features
Version 27 offers many other new features that you will discover once you order and receive your software...
Minimum version required
  • Version 26
This page is also available for…
Click [Add] to post a comment