Home | Sign in | English EN
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WindowsLinuxPHPWEBDEV - Browser code
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Stored procedures
HTML: a universal necessity
The new features of the new HTML control in version 26 bring you infinite power and functionalities.
The new control is based on Chromium and uses the latest HTML technologies.
Your applications will display web pages (Part 1), your applications will generate HTML pages, your users will create or modify their HTML pages (Part 2), your applications will offer standard email management functionalities (Part 3), you will easily program powerful processes for analyzing the contents of web pages (Part 4).
Whether it's on Windows, Internet, Android or iOS, you're going to make the most of HTML.
Native HTML display control: Perfect results
The HTML Display control is used to display a web page.
For example, in 1 line of code, without using an external browser, your WINDEV applications can display a page of a website: help, news, technical documentation...
The HTML Display control in version 26 perfectly displays all HTML documents, created with WINDEV, WEBDEV or WINDEV Mobile or any other editor.
The latest tags are supported.
CSS style sheets are supported.
The JavaScript code that may be present in the HTML content is interpreted, if you allow it.
The control displays either HTML content (a file) or remote content from a URL.
HTML display control: Chromium technology
The control from earlier versions was based on Internet Explorer ActiveX.
The HTML Display control in version 26 uses Chromium and does not require any external resources to operate: no ActiveX, no dependency on the Windows version or the browser installed on the user's machine.
A web browser in your applications
Version 26 includes the source code of a browser.
You can use, modify and customize this code to include it in your applications.
Using this type of browser will ensure that your pages will be displayed in the same way for all your users.
This browser also allows you to define a list of the sites that can be opened, which can be useful in a professional environment.
HTML Display control: Auto-populate Web forms programmatically
The manipulation of the HTML "control" through programming should not be confused with the manipulation of HTML "code" through programming (Part 4).
An application may need to interact with the content of the page:
  • Trigger the click on a button through programming to automatically display the next page
  • Populate a form programmatically
  • ...
The HTML Display control in version 26 comes with new WLanguage functions:
  • Fill out an edit control
  • Fill out a form control
  • Click a button
  • Get the value of a field in a form
  • Identify a control
  • Click a radio button or check box
  • Click an option in a check box
  • ...
HTML Display control: An HTML button can execute WLanguage code
An HTML Display control can trigger the execution of WLanguage code (from a button, etc.). This WLanguage code is present in the window that contains the HTML control.
In the JavaScript code of the HTML button, simply call WLExecute, passing the WLanguage procedure and its parameters.
Useful feature: the WLanguage function called from the JavaScript code can take several parameters.
If necessary, you can call JavaScript code contained in the page from the WLanguage code.
New events
New programming events are introduced to manage and customize the HTML Display control.
They are added to existing events.
  • Load resource
    This event is used to filter the loading of an element in the page before being downloaded.
    For example: prevent loading resources that are on another domain or on unauthorized or blacklisted domains; prevent loading tracking images, etc.
  • Change page
    This event makes it possible to be notified before requesting a new page, or to memorize the sequence of pages viewed.
  • Right click on a link
    It allows displaying a context menu, for example.
    It can also be used to prevent changing to another page.
  • Handle content of HTML control
    The HTML control can be linked to an HFSQL data file (or other): it can be "bound". The binding can be created on the whole page or on a part of the page.
    This can be useful for managing product forms, for example.
HTML Display control: Miscellaneous
  • 3 new properties are introduced: URL, Document, PopupMenu.
  • JavaScript code is executed in a secure environment ("sandbox").
  • Advanced management of 4K display.
  • The outline of the control can be configured.
HTML edit control: Feature rich
The HTML Edit control in version 26 uses the latest HTML standards.
All HTML functionalities are recognized and can be used.
CSS code included in the HTML content is managed natively.
HTML edit control: Feature
The edit control has an integrated ribbon.
You have nothing to program in your application.
The look and features of this ribbon can be customized (you can add buttons and panes).
Default options include:
  • font, size, color
  • bold, italics, underline, strikethrough...
  • import CSS styles
  • management of images: move, crop, resize, rotate, etc.
  • edit links
  • undo/redo
  • copy/paste raw text, RTF, Docx, HTML
  • paste without formatting
  • save
  • print
  • export to PDF
  • emojis
  • Alignment
  • indent
  • arrays
  • spelling checker
  • find/replace
  • ...
HTML edit control: Switch from WYSIWYG mode to source mode
The HTML control allows you to write HTML code in WYSIWYG mode.
For advanced users (or for copy/paste masters), it is possible to switch to source mode at any time, to view HTML tags.
This makes it possible, for example, to declare a CSS sheet, insert a particular tag, paste a code snippet...
In the source mode, it is also possible to write (or paste) JavaScript code.
HTML code is stored in UTF-8 format and is viewed in WYSIWYG mode.

HTML edit control: New WLanguage functions
The HTML Edit control is usually embedded in a window that provides automatic functionalities on the HTML content being entered, often via buttons: insert text defined through programming, insert a quote, format and insert data from the current window, insert a signature, insert a logo, position the cursor, preselect text.
Several WLanguage functions have been introduced for this purpose in version 26:
  • HTMLEditorFormatSelection: Applies formatting to the selected text: bold, italic, underlined, size, font, CSS style...
  • HTMLEditorInsert: Inserts text or HTML code at the cursor position. If a portion of text is selected, it will be replaced.
  • HTMLEditorInsertTable: Inserts an empty table at the cursor position. The number of rows and columns must be specified as parameter. The end user can edit this table using the mouse.
  • HTMLEditorSelect: Positions the cursor.
HTML edit control: New events
New events are introduced to finely manage this HTML Edit control.
  • Selection
    This new event is called each time the user selects an element in the HTML document.
    The new edtHTMLSelection WLanguage type allows you to get information on the selected elements: selected word...
  • After loading the page
    This new event is called once the page has been fully loaded. This is useful, for example, to start an automatic page analysis.
  • Load resource
    This new event is called each time the page downloads an element: image, file... It allows you to check and prevent a download if necessary.
  • Whenever modiying
    This new event is called each time the user makes a modification in the page: input,...
HTML Email Edit control
Version 26 features a new, email-specific HTML Edit control.
This control allows your applications to include WYSIWYG rich text input using the HTML standard, which can then be recognized and displayed by all email providers.
The created HTML document can be stored in memory or on disk.
The secrets of email text
It is important to know that emails cannot contain all standard HTML or CSS elements.
Each email provider (Gmail, Yahoo, Outlook, Thunderbird, Courier, etc.) has its own limitations.
To be interpreted correctly, an email can only contain a subset of the HTML and CSS functionalities.
For example, Gmail does not support SVG and HDR images or <video> tags, Outlook does not support "Submit" buttons or HTML 5 Doctype, Yahoo does not support anchor links, etc.
The HTML Email control in version 26 only allows the use of the functionalities supported by all email providers: the emails created with your applications will be displayed correctly!
Email control: Images
Images in the HTML Email control are included as attachments (images encoded in base 64 are not supported by email providers).
Easier email management
A comprehensive email management example, based on the HTML Email control and including the WLanguage source code, is provided in version 26.
For example, when replying to an email, the original message is automatically copied and indented below the reply text.
Signatures can also be inserted automatically.
Your applications will get a big boost, effortlessly!
Native programming
WLanguage allows you to handle, read and enrich an HTML document through programming, without a UI.
Two native types, 2 new functions and 285 new syntaxes (see page 50) allow you to handle HTML source code, build a document from scratch, modify an existing document, add tags, search and modify content, add images and tables,...
You can natively access each node in the HTML tree.
You can also create or modify JavaScript code in the HTML document.
Local CSS styles can also be handled through programming in version 26.
2 native types to handle html documents
Version 26 offers advanced possibilities to handle HTML: 2 WLanguage types are introduced.
These native types allow you to perform all operations on existing or new HTML documents.
The native htmlDocument type is used to manage the entire HTML document.
The native htmlNode type is used to manage a node of the HTML tree: a table, an Input field, a Meta tag...
The htmlNode type offers many properties to manage each tag:
  • tag name
  • attribute
  • child element
  • sibling element
  • parent element
  • rank
  • ...
Example of access to a node of the HTML tree:
Document is htmlDocument
Document.body:color = "blue"
Search for elements in the HTML document
2 new WLanguage functions allow you to search for elements in the entire HTML document: HTMLFindElementById and HTMLFindElementByName .
These functions return an htmlNode variable, which can be used to perform all the desired processes.
Code samples
HTML programming in WLanguage is very powerful in version 26.
Here are some examples of code used to read HTML:
  • Get a company's turnover on a website
    // Get the company's turnover
    // from the HTML file used to display data in table
    HTMLDoc is htmlDocument
    HTMLDoc = HTMLOpen("https://site.com/page.html", fromURL)
    FOR Year = 2018 TO 2020
        element is htmlNode = HTMLDoc.FindByID("TO_" + Year)
        TableAddLine(TABLE_TO, Year, element.value)
  • Analyze an HTML page to retrieve an invoice
    // Get the invoice URL from the HTML file
    // to download the invoice
    HTMLDoc is htmlDocument = HTMLOpen("MyFile.html", fromFile)
    node is htmlDocument = HTMLDoc.FindByID("Invoice_092020")
    InvoiceURL is string = element.attributes["href"]
  • Browse through an HTML table
    // Browse through table rows with ID czZ4 in the HTML document
    HTMLDoc is htmlDocument = HTMLOpen("MyFile.html", fromFile)
    table is htmlNode = HTMLDoc.FindByID("czZ4")
    FOR EACH ROW OF table.tbody
  • Get the favicon of an HTML page
    // Get the URL of the page logo
    IMG_logo = HTMLdOC.head.querySelectorlink[rel*="icon"]').href
Here is an example of an HTML code generation program, which, based on a template, builds an HTML page to write reviews on a selection of products from a database:
// Create survey
// For new products, ask the opinion of the customers
// "Base of survey" html document
HTMLDoc is htmlDocument = HTMLOpen(SurveyTemplate, fromString)
// Set position on <table>
TheTable is htmlNode <- HTMLDoc.FindByID("TheTable")
// Get "template" row (which will be deleted)
TemplateRow is htmlNode = TheTable.TR
delete ALL(TheTable)
// For each new product
FOR EACH Product where new = True
    // Create a survey row
    // with a caption: "PRODUCTNAME is a new product."
    // and an edit control already present in the template row
    ARow is htmlNode = TemplateRow
    ARow.TD.label..Text = "Your opinion about" + Product.ProdDesc
// Add row to the HTML document
Add(TheTable, ARow)
// Save page
HTMLSave(HTMLDoc, "survey.html", HTMLDefaultDocument)
Map: Integrate images in a map
In version 26, you can place images and drawings on a map, to achieve a ground overlay effect: a good example would be overlaying the area of a company building, using the company logo.
The image is embedded in the map, which means that when the map is zoomed in, the image also zooms in. The image size must be specified in meters.
Map: integrate geometric shapes in a map
In version 26, you can also draw and integrate geometric shapes in a map:
  • line
  • square
  • round
  • polygon
  • polyline (broken line)
  • ...
The shape is embedded in the map, which means that when the map is resized, the shape is resized as well.
Map: Display road traffic on a map
Real-time road traffic can be displayed on a map.
On a Google map, the data comes from Google Maps.

Map: display a geographic area
By default, a map can display a given geographic area in full screen mode.
You can force the map to display only this area: the user will be able to zoom in, but will not be able to zoom out.
The area to be displayed can be specified using either its geographical coordinates or its name (city, region, country, etc.).
MapDisplayArea positions the Map control on a given geographic area (coordinates of the corners).
MapLimitArea limits zoom and drag so that the specified area is always visible.
geoGetArea takes a street, city or country and retrieves the coordinates of the corresponding area.
Map: Display a popup
Markers have many additional options in version 26, including the possibility to display a popup either through programming or when the marker is clicked on.
This Popup can be fully customized using an Internal Window or an Internal Page.
3 new WLanguage functions are introduced: MapDisplayPopup, MapClosePopup and MapPopupDisplayed .

Map: Prevent gestures on mobile devices
On mobile devices, there are 4 possible gestures on maps:
  • Pinch zoom
  • Scroll
  • Rotate
  • Tilt
In version 26, you can prevent some of these gestures on a map.
Map: Style: Dark theme...
In version 26, a map can be displayed using a dark theme.
Other map themes (grey, etc.) are also available.
Map: 3D view, angle...
You can change the viewing angle of the map (0° to 45°) through programming, using a single property: Tilt.
You can also rotate the map.

Map: Marker cluster, automatic grouping
In version 26, Map controls feature "automatic clusters".
Marker clusters improve the readability of a map when there are many markers in a small area. The cluster automatically groups the markers, preventing them from becoming cluttered and unreadable.
By default, a cluster is represented by a circle.
The color of this circle varies according to the number of markers it contains.
The number of markers is automatically shown in the circle.
Everything can be customized.
For a marker to be grouped in a cluster, simply use the .Cluster property .
A new WLanguage type allows you to customize the characteristics of clusters: the type MarkerImage .
Map: Miscellaneous
In version 26, the Map control benefits from other new features:
  • Ability to display a compass
  • New properties for markers: Opacity, Movable , ActionDrag, ZOrder, Note ...
  • The MarkerImage type allows you to customize the image of a marker.
Smart controls
Version 26 features 10 new Smart controls:
  • Help for password creation,
  • "Bank-type" PIN code input,
  • 3-dot context menu button,
  • Google reCaptcha,
  • Video control with playback buttons,
  • Phone unlock pattern,
  • Combo box with check box,
  • Token in filter mode,
  • Date and time input with the mouse,
  • Snackbar.
PDF Reader control: Extract pages
The PDF Reader control allows you to create a new PDF document that contains a set of pages (range or different pages) of a specified PDF document.
PDF Reader control: Add pages
The PDF Reader control allows you to insert one or more pages at a specified location in an existing PDF document.
PDF Reader control: Delete pages
The PDF Reader control allows you to delete one or more pages from an existing PDF document.
PDF Reader control: Hovered area
In the PDF document, how to determine what the end user is hovering over with the mouse? MouseXPos and MouseYPos are the standard functions used to get the mouse position.
The PDFReaderInfoXY WLanguage function returns the page number and the mouse coordinates within the page (in millimeters).
For example, this allows you to display context information about the PDF document.
WP control: Continuous display
The Word Processing control now offers continuous text display, without page breaks. This allows for smoother reading.
WP control: Miscellaneous
  • Spanish dictionary included
  • Default file save name: start of text or defined through programming
  • New function: DocInfoXY.
Spreadsheet control: Document with multiple worksheets
In an XLSX file with multiple worksheets, the last worksheet used is remembered, and will be displayed next time the file is opened.
The end user can also rearrange worksheets.
Spreadsheet control: Miscellaneous
  • It is now possible to merge cells through programming.
An OCR (Optical Character Recognition) system analyzes an image to extract the text it contains.
Version 26 allows you to include native OCR functionalities in your applications and sites.
The OCR engine is a neural network. It decrypts images containing text.
Take a picture of a contract with your phone, and retrieve the text in your app or in Microsoft Word!
OCR is also very useful for a DMS, in order to index the contents.
A new WLanguage family: OCR
The method for retrieving a text is simple: simply pass an image (any format) or a PDF document to the OCRExtractText function.
OCRExtractText will return all the text from the image.
All content other than text is ignored.
To analyze only a part of an image, simply specify the coordinates of the part to be analyzed.
For example:
MyRectangle is Rectangle
OCRExtractText(MyImage, MyRectangle)

OCRExtractTextBlock analyzes an image and returns a set of rectangles each containing a block of text.
OCR: Management of languages
By default, all languages are supported.
The OCR system recognizes the following charsets:
  • latin
  • cyrillic
  • chinese
  • japanese
  • arabic
  • hebrew
  • ...
Additionally, the OCR system analyzes the resulting texts in real time and uses a language-specific model.
This model improves recognition.
The default optimized languages are English, French and Spanish.
To optimize other languages, simply integrate the training model of the corresponding neural network (available on the Internet).
Multiple languages can be supported simultaneously.
This optimization can be disabled.
New feature in Chart controls: Vertical labels
A new option allows you to change the orientation of bar values.

New Chart: Range area
A new type of chart is introduced in version 26: the Range Area chart.
This type of graph is used to visualize a variation between a high and a low value.
The X-axis generally represents time, and the chart shows the evolution of the high and low values.

New feature in Chart controls: Dotted gridlines
You can now use dotted gridlines in Chart controls: these are a lighter version of standard gridlines!

exit a required input field without filling it in
WINDEV, WEBDEV and WINDEV Mobile have always included required input fields.
If the required input field was empty, the user was unable to move to the next field.
In version 26, it is possible to exit a required input field and fill it in later: the required fields will only be verified when the window or page is validated.
A new option has been introduced in the controls 7-tab window: "Required input: Non blocking".

Non-blocking required input field: How it works
A new WLanguage function has been introduced: InvalidInputDetect.
Simply call the InvalidInputDetect function in the window validation code.
This function returns True or False .
When the function returns False, it means that there is at least one required field left empty. The window goes back into input mode and the cursor is positioned on the first empty required field.
Required fields that are left empty are highlighted with a specific style.
Highlight required input fields automatically
More specific options have been introduced to highlight required input fields. The style of a control determines how the required input will be indicated: asterisk, red border, icon...
An additional indication can be used to identify fields that have been left empty, after trying to validate the window or page.

Required input field: New, combo box, radio button, check box
In version 26, in addition to Edit controls, you can set the following controls as "required fields":
  • Combo Box, editable Combo Box
  • Radio Button
  • Check Box.
The styles of these controls include all the necessary graphic elements.
Invalid input mask
The verification of edit controls with an input mask also evolves.
The control style now includes the necessary elements to highlight an invalid input: icon, text, borders...
The input can be verified immediately, or upon window validation.
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.
Syntax highlighting outside a configuration
In version 26, all open code offers syntax highlighting, even code that is not included in a configuration.
32-bit and 64-bit operation
The integration of WINDEV Mobile and WEBDEV in WINDEV has always worked in 64-bit mode.
In version 26, the products can also be integrated in 32-bit mode.
This makes it possible to use external resources (ActiveX, DLL, Native Connector, etc.) that work only in 32-bit.
Your existing WINDEV projects can become websites or SaaS applications
A widespread need is to transform a Windows application (or parts of applications) into a dynamic website or SaaS application.
WINDEV and WEBDEV perfectly meet this need.
In version 26, the SaaS manager has been modernized.
Style sheet naming 
In version 26, you can freely create and name your style sheets.

Multiple style sheets per project
In version 26, a project can use multiple style sheets simultaneously.
When selecting the style, it is possible to filter the style sheet(s) to be displayed by default.
Easily share style sheets 
Thanks to these new features, it becomes much easier to manage and reuse your styles without constraints.
A style sheet can be simply copied to the project directory like any other element.
Style sheets can also be managed and shared via the SCM.
Everyone will love these simplified operations!
Generate classes from the analysis (object-relational mapping)
It is now possible to generate a data file (table) class directly from the data model editor.
No need to go back to the project explorer.
Generate structures
It was already possible to generate a class from a data file (table) description .
In version 26, it is now possible to generate a structure instead of a class.
More efficient environment: Multiple windows
2 code windows opened side by side etc?
1 window and its code side by side? Select a control, press F2 and the code changes in the window next to it.
A WINDEV window and the equivalent WEBDEV page?
In version 26, these modes are automatic.
You no longer need to manually move and resize windows: That changes everything!
Each window has its own document bar.
You can open more than 2 windows simultaneously and use a splitter to resize each window.
The workspace is now automatically reorganized.
The workspace can be divided into several horizontal or vertical windows.
In each window, you can open as many documents as you want, from any editor.
You can Drag & Drop a document from one window to another.
The same document can be opened multiple times in different windows, to view simultaneously:
  • the different layers of a window or page
  • the different resolution slices of responsive pages
  • the different layouts: portrait, landscape, iOS, Android , tablet, smartphone, etc.
  • a WINDEV window and the equivalent WEBDEV page.
Navigate through the document bar with the mouse wheel
In version 26, you can navigate through the document bar using the mouse wheel: it's a very practical feature.
3X faster compile time
Buckle up... In most cases, your projects will compile 3 times faster!
This makes work significantly easier.
Open 7-tab windows even faster
We all spend a lot of time in the 7-tab windows!
These windows will now open faster to improve development workflow!
Navigation between elements: Faster CTRL+Tab!
The CTRL+TAB key combination allows you to quickly switch between open elements.
In version 26, this operation doesn't have any latency any more:
53 minutes saved per year!
Less operations: detach tabs from the ribbon
In version 26, you can detach a tab from the ribbon to make it permanently accessible.
This avoids switching between tabs.
For example, when working on UI, the alignment tab can be left permanently open.
You can detach multiple tabs.
Updated project explorer
In version 26, the project explorer has been made lighter and more user-friendly.
Elements of different types are clearly separated.
Right/left? Project explorer on the left
It seems the mouse cursor is most often positioned on the left side of the screen.
To reduce mouse movements, the explorer is now positioned on the left by default. And if you prefer, you can send it back to the right in 1 single operation!
Link editor (window, page, report)
A link editor is introduced in version 26.
This editor lists all the controls in the window, page or report, and indicates whether each control has a link, as well as which source it is linked to.
The editor also allows you to modify the link of a control or a group of controls: replace a data file with a request, for example.
You can launch a search for all the uses of a control in the code of the window/page/report.
Search on selected controls
As you know, WINDEV offers a powerful search feature in its environment. You can search for elements in the code, in 7-tab windows, in multilingual messages...
In version 26, it is possible to narrow the search down to a set of controls selected with the mouse.
Copying/pasting a control linked through programming renames the references to this control in the code
Let's take the example of an Edit control followed by a "Browse" button. The code of the "Browse" button opens a file selector and assigns the file selected by the user to the Edit control. The name of the Edit control is therefore in the code of the "Browse" button.
When the Edit control and its button are copied and pasted in the same window, the new controls will automatically be renamed.
Without this method, the code of these controls would be wrong, as it would use the old control names.
In version 26, the names of controls used in programming that are copied and pasted, are automatically renamed.
Reopen an element closed by accident: Ctrl+Shift+T
During the development phase, open elements are often closed by accident: a window, a procedure, a class...
Finding it to open it again can be really annoying.
In version 26, you can simply press Ctrl + Shift + T to reopen the last closed element (just like on a browser).
If you press Ctrl + Shift + T twice, you will open the last 2 closed elements, etc. (Up to 10 elements).
Clipart: 10,000 new icons
The provided clipart is enhanced with 10,000 new icons in modern, outline and black & white styles.
Take a look to enrich the UI of your applications and sites!
New look of ribbon icons
The ribbon now uses vector icons, which are even sharper.
  • All the events of the project, even those from other configurations, are visible.
  • A new option allows you to list Custom-Folders of a project, if it contains more than 20.
  • It is now possible to include or exclude an element from a set of configurations in a single operation.
  • The content of the portfolios changes according to the environment that uses them.
Categorize bug tickets
You can now tag bug tickets to easily classify and sort them.
Use as many tags as you want.
The same ticket can have several tags.
Examples of tags:
  • to develop
  • urgent
  • suggestion
  • accounting module
  • ...
Creation of requirements: improved UI
You can now create requirements with 3 times less clicks.
UI has been simplified.
Task list: highlight tasks in which you are the requirement manager
Each developer views their task list.
The developer filters this list according to different criteria: sprint, folder,...
When the developer is also the manager of a requirement, the tasks that belong to that requirement are highlighted.
This allows developers to better prioritize their tasks.
Warning when using old syntaxes for threads
Old syntaxes for managing threads are still supported.
In some cases, these old syntaxes do not allow closing windows and pages.
The audit identifies these old syntaxes and proposes to replace them with the modern syntax, which is richer and more secure.
Control prefixes: UI compilation error
Controls that do not use a prefix defined in the code style appear in the UI errors.
This feature is not enabled by default.
Detection of missing dependencies
The audit now reports missing dependencies.
These are some of the types of dependencies that can be detected: style sheets, external libraries, documentation files, external CSS sheets, external JS codes, favorites file, internal and external component files, code style, custom fonts in the project, etc...
HashString changes according to the platform (Mobile, Linux)
Android and iOS handle UNICODE strings differently.
Android stores 4-byte characters (like Linux), while iOS stores 2-byte characters (like Windows).
The WLanguage HashString function (which manipulates bytes) will give different results depending on the platform.
The dynamic audit reports this.
Cleaner layout
The technical documentation of your application now proposes to exclude the captions of properties without content.
Only the properties that have actually been used appear in the documentation.
This allows for clearer pages.
New action: site (and webservice) deployment
Action plans can now include the deployment of a site or a Webservice.
A highly anticipated and practical new feature related to management task automation.
Temporarily disable an action
You can now disable an action to stop executing it, without losing its configuration.
New action: Disable programming standard errors
The Software Factory now differentiates programming standard errors (zombies, etc.) from other compilation errors.
It is now possible to specifically disable these errors in order to run action plans.
Administrator: Better and faster UI
The Software Factory administrator becomes significantly faster: it is much easier to use.
Login with two-factor authentication: automatic
In version 26, WINDEV, WEBDEV and WINDEV Mobile allow you to set up a login via two-factor authentication.
The User Groupware (GPU, included as standard) now supports two-factor authentication through a standard application (Google Authenticator, Microsoft Authenticator or other).
This application, to be downloaded on a mobile phone, returns a personal code on demand (valid for 30 seconds) that must be entered at login (TOTP protocol).
The GPU administrator can make two-factor authentication mandatory.
The GPU administrator can also temporarily disable two-factor authentication for a user (if the user loses their phone, for example).
The "Trust this device" option is available. After using two-factor authentication for the first time, this option allows the user to switch back to single authentication mode to facilitate connections from that specific device.
The "Trust this device" option is automatically managed.
Unified user management (MBAAS)
WINDEV's User Groupware (GPU) has always allowed direct access to the User Groupware database. This mode will work as usual.
In version 26, your WINDEV applications, WEBDEV sites and WINDEV Mobile applications can access the User Groupware through MBAAS (Webservice).
In MBaaS, data is accessed through a Webservice. This access does not require opening any particular port.
The User Groupware can then be managed via a website.
If you allow it, end users will even be able to log in to this site to manage their own profiles: change their passwords....
"Git" tab in the editor ribbon
To make Git-related actions easier, a tab with the most common Git commands is now available:
  • commit
  • pull
  • push
  • merge
  • ...

Project (WDP) in text format
The list of elements of the project is now stored in text format to merge projects more easily in Git.
Rectangular snip
The image editor now offers a a useful rectangular snip feature. You can now take a screenshot on the PC by selecting the rectangular area you want to snip.
This area can then be edited directly in the image editor.
WDTRAD: Load documents faster
Documents are loaded much faster in WDTRAD.
No more coffee breaks when loading large documents. Sorry!
WDTRAD: multi-selection
You can now make certain operations in bulk by selecting multiple elements. For example, if a term is changed, you can delete a series of obsolete entries in the dictionary in one go.
The search is also improved.
WDINT Spanish
In version 26, you can select Spanish as the source language to translate the framework.
SCM: tree view of internal components
In version 26, the update window displays internal components in a tree structure.
SCM: Improved UI of branch history
The history of the elements of a branch can be viewed from the branch itself, without having to go back to the trunk.
SCM: launch action plans automatically during reintegration (CI/CD)
When one or more elements are reintegrated, one or several action plans can be started automatically.
For example:
  • start automatic tests
  • update the projects that share these elements
  • generate executables
  • run setups
  • ...
This new feature facilitates Continuous Integration & Continuous Delivery.
Developers often dive deep into their code: using F2 several times in a row is quite common!
In version 26, Breadcrumbs are introduced in the code editor.
These breadcrumbs allow you to view the structure of the code, and to go directly to the desired level.

Light coloring: 3 colors instead of 36 shades
The code editor allows you to fine-tune syntax highlighting.
For developers who prefer a clearer view of their code, a new, simpler coloring mode has been added.
Many color shades are no longer used.
Code is easier to read.
Move with CTRL + ARROW keys
Moving with Ctrl + Arrow is now more intuitive:
  • Ctrl + Right arrow: beginning of next word
  • Ctrl + Left arrow: beginning of previous word
  • Ctrl + Shift + Right arrow: extend selection to the end of the next word
  • Ctrl + Shift + Left arrow: extend selection to the end of the previous word.
Debugger: real-time variable watch
In version 26, the debugger systematically displays the value of the variables at the end of the line.
You can avoid hundreds of operations every day!
Remote debugger: select an EXE or a service started multiple times
When doing remote debugging (with WDDebug, included as standard), the debugger must be associated with the process.
When the same EXE or service is started multiple times on the remote machine, the selection list now shows the details of the command line (often unique per process) for each instance, which makes it possible to identify each process.
An integrated devops environment
WINDEV, WEBDEV and WINDEV Mobile version 26 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: life cycle management, testing, continuous integration, deployment, continuous delivery, production, user feedback,...
Version 26 includes some interesting new features for Docker, robot (Watchdog), ...
Report editor: improved Gantt chart reports
Gantt chart reports have been revised and improved: task labels and recipients are included in the first column of each task, the number of days of each task is displayed,...
Better layout and legibility.
Your Gantt chart reports will look amazing!
Report editor: New Progress Bar control
In reports, progress bars are often used to represent data, instead of bar charts, for example.
In version 26, the report editor supports Progress Bar controls: linear and circular progress bars.
Glocals: Global variables, but only in their control
Glocal variables are global variables, but with a scope limited to the control in which they are defined: they are both Global and loCal!
When a control is copied to another window, there is no longer any risk of forgetting these variables, since they are in the control!
A Glocal variable is encapsulated in its control.
This variable is accessible from all events of the control: it is no longer necessary to define this global variable in the window.
Code becomes generally clearer.

Glocals: Procedures and properties
You can also define procedures and properties that are local to the control.
Thus, everything is encapsulated in the control.
Glocals: Override WLanguage functions and properties
If you give one of your procedures or properties the same name as a WLanguage function, your procedure or property will be called instead of that function.
This overrides WLanguage functions and properties: you can add a test in the function.
For example: It may be useful to override the TableAdd function to format data before adding it to the table (e.g., convert a birth date to age).
Glocals: Derive native controls
By using the 3 previous new features of version 26, it becomes very easy to derive the native controls of WINDEV, WEBDEV and WINDEV Mobile.
Current control: This
The This keyword is used to access the current control.
This makes it easier to write generic code.
Callback: Detect wrong prototypes at compile time
In version 26, function calls can take a callback as parameter.
This callback expects a certain number of parameters, of a certain type.
If there is an error in these parameters, a compilation error is generated.
Gmail, office 365: Login with two-factor authentication (imap, SMTP)
More and more email servers are using two-factor authentication: Gmail, for example.
In version 26, the Email functions used to access IMAP and SMTP servers support this authentication standard.
When opening the connection to the server, for security reasons, the user will be required to enter the two-factor authentication code.
Implement two-factor Authentication (PDS2 EU directive)
Reminder: a standard functionality in the User Groupware allows you to automatically implement two-factor authentication in your applications.
However, if you want to manage two-factor authentication in your applications or sites, you can use the following 3 new WLanguage functions:
TwoFactorAuthenticationGenerateTOTPKey generates the secret key passed to the third-party authentication app on the device, TwoFactorAuthenticationGenerateLink generates the QR Code that will be scanned by the authentication app, TwoFactorAuthenticationCheckCode checks the code .
Arrays, set operations: Union, intersection
In version 26, WLanguage proposes set functions on Array variables:
Regular expressions in Unicode
In version 26, the WLanguage functions for handling regular expressions also work in UNICODE: Chinese, Japanese, Russian, Arabic, Hebrew....
Replace: Replacement array
The Replace WLanguage function is now more powerful.
A set of characters to be replaced can be contained in an array.
A second array will include the replacement characters.
This avoids making successive calls, searching the string several times.
Write at the beginning of text files: fInsertTextAtBeginning
You want to write information in a LOG file with the most recent information at the beginning?
The new fInsertTextAtBeginning WLanguage function is exactly what you need!
Instead of adding data at the end of the file, this function adds it at the beginning.
SVG vector image: modify the image through programming
In version 26, you can modify the content of an SVG image through programming.
For example, replace a color, add or remove objects, add or modify text,...

oAuth tokens with expiration time: Keep them alive!
An oAuth token can have a expiration time set by its author: a few minutes, for example.
Once the token expires, it can no longer be used. If the application still needs that token, it will have to request a new authentication.
To avoid this, it may be convenient to keep the token active beyond its expiration time.
This is now possible with the AuthRefreshToken WLanguage function.
New function :DateTimeToString
DateTimeToString is used to directly convert a DateTime to string.
Trace function: Increased speed
When the trace window integrated in the editor is displayed, the Trace function is 3 times faster.
ExceptionChangeParameter with global scope
The ExceptionChangeParameter function can now be global to the project.
Zip compression functions: 2 new functions
Reminder: Zip functions work with all compression methods, not only Zip!
Two new functions have been added to the Zip family:
  • zipExtractDirectory: extracts only the contents of a given directory.
  • zipFilter: returns the list of extensions supported by the version used: zip, 7z, rar, cab, wdz, tar, tgz in version 26. Useful in combination with fSelect.
Zip functions: The user can cancel during extraction
To allow the end user to cancel an extraction process, the zipExtractAll function now accepts a Callback.
By returning False in this callback, the process stops the extraction.
Zip & GitHub: Support for tar.gz (TGZ) files from GitHub
Compressed files returned by the Git Archive command are of a special format: Tar.gz.
This specific format is supported in version 26.
New polygon type
The new Polygon type bas been introduced in WLaguage. This type can be used, for example, to draw lines in maps, images and charts, and to define text areas using native OCR.
Write an entire book with 1 line of WLanguage code
The new GenerateLorem function allows you to generate "Lorem ipsum" text of a given extension.
This type of text is universally used in DTP to quickly materialize a text with variable content.
This text is random, pronounceable, but has no specific meaning...
Thread type: Stored return value
When using several threads at the same time, some serious skills were required to memorize the return values of the different threads.
In version 26, Thread variables automatically memorize the value that will be returned in the procedure of the thread.
To view this value, simply read this variable. That requires some not-so-serious skills!
Secure threads
Accessing a control from a thread is not recommended.
Why? If a thread deletes a row from a Table control using its index, and the user adds a row to the table at the same time, the thread could delete the wrong row...
The new <secure> attribute has been introduced to avoid this kind of unpredictable behavior.
The procedure of the thread that would access a control (or that would call another procedure which accesses a control) with this attribute, generates a WLanguage warning error.
Buffer comparison
Version 26 allows the immediate comparison of parts of buffers.
2 syntaxes are available. Here are some examples:
buf is Buffer = [0xEF,0xBB,0xBF,0xCF,0x2F]
IF buf = [0xEF,0xBB,0xBF,0xCF,0xDD] THEN
IF buf[3 ON 5] = [0xBF,0xCF,0x2F] THEN
PDF file generation: Image size
When generating a PDF file through programming, the size of the images included in the file is adapted to the view and print size.
Initially large images will be reduced, therefore reducing the size of the PDF file.
You can still keep the image in its original size, or specify its exact definition.
Search for a set of characters within a string
The Position function is used to determine the position of the first character of a set of characters in an array.
This function now returns 2 values (tuple): position in the string and character index in the array.
SOAP Webservice: Asynchronous call
Asynchronous calls to SOAP Webservices are now managed automatically.
The application is no longer blocked during the call, especially when the Webservice server does not respond!
REST Webservice : Asynchronous request
In version 26, you can also make asynchronous HTTP and HTTPS requests.
HTTPRequest: Get received data and headers
In version 26, you can view and analyze the details of the data and headers received with the HTTPRequest function .
This makes it easier to perform advanced debugging operations.
The Callback in the httpRequest variable for the trace process is called with 2 new constants: httpTraceHeaderReceived and httpTraceDataReceived .
HTTPRequest: HTTP2 support
The HTTP2 standard allows for faster and safer browsing.
This standard is supported in version 26.
For more details, see httpRequest.
XML syntax highlighting in multiline strings
In the code editor, a multiline string can contain XML code.
In version 26, you can apply syntax highlighting to this code (context menu).
Note that this option was already available for SQL, HTML and WLanguage.

sXMLCode is string = [
           <Week UniqueValue="245321"/>
           <Month UniqueValue="867234"/>
           <Day UniqueValue="35627"/>
           <Week UniqueValue="2453"/>
           <Month UniqueValue="2387"/>
           <Day Values="[1705,2121,2001,2083]"/>
Callback: Pass a method as parameter
A function can take a Callback as parameter.
In version 26, you can pass a method of an object for this Callback parameter.
The instance of the object whose method is passed as parameter will be used.
Equality operator
The equality operator is introduced in OOP.
This operator allows for code such as "IF object1=object2 ..."
It also allows you to search in an array of objects (ArraySeek).
Comparison operator
Comparison operators < and > are introduced in OOP.
These operators allow you to easily sort objects (ArraySort).
IOT: Modbus support
Modbus is a communication protocol used in electronic devices, mainly in the industrial world. It's a free protocol.
With the introduction of the new Modbus WLanguage functions, version 26 supports this protocol.
These functions allow slaves to read and write: robots, sensors, display supports, machines...
TCP and RTU protocols are supported.
IOT: Data collection by a WEBDEV server
Some sensors send data via the HttpRequest protocol .
A web server is required to retrieve this data.
The WEBDEV Application Server makes it easy to collect, store and use the data received!
Version 26 includes a documented example on data collection and processing.
Reminder: data can be hosted via PcsCloud.net, your own solution or any other hosting provider.
Asynchronous HFSQL query execution: The application is not blocked waiting for the end of the query

In version 26, you can execute HFSQL queries asynchronously.
The application is therefore "non-blocking". The end user can continue to use the application while the query is being executed on the server.
Simply use the new syntax of the HExecuteQuery WLanguage function to pass the name of the Callback as parameter.
The Callback will be called as the records are received.
The number of records passed to the Callback is optimized according to many parameters: network speed, frame size, record size, server load...
GDPR: Determine if an item is GDPR relevant
In the data model editor, you can indicate that the GDPR applies to a specific item.
In version 26, this information can be retrieved through programming using the GDPR property on the item.
This allows for fine-processing of sensitive data.
Search for optimization on a specified query
Need to optimize the speed of a particular query or set of queries?
Need to check if a given query has been optimized?
In version 26, you can run the optimization search functionality (check the presence of necessary keys) on a specified query or set of queries.
If a set of queries is specified, any keys created will be optimized for the entire set.
To optimize speed, simply use the HSuggestKey WLanguage function on the production site with the actual data. This function returns a status report of the same type as the one returned by the HFSQL engine.
Start the search for optimization: On/Off
You can also start the optimization of queries that are executed from one given moment (HSuggestKeyStart) to another (HSuggestKeyEnd).
This can be useful for optimizing the different queries executed during a particular process.
Trigger: Access the value of items before modification
It may be necessary to know the value of the items in the modified record before it is modified or deleted.
This is now possible with the HTriggerRecordBefore function.
Automatic cleanup of "internal" working directory
The HFSQL engine uses a working directory named INTERNAL.
In version 26, this directory is regularly emptied, so you won't have to do it anymore.
Determine if a transaction is in progress
In version 26, you can determine if a transaction is in progress with the HTransactionInProgress WLanguage function.
Assisted universal replication editor: Simplified UI
In version 26, the universal assisted replication benefits from clearer and more intuitive help:
  • File addition plan
  • Explanation of the different options
  • Addition of connections from the replication editor
  • ...
Backup Webhook : Description
A Webhook can be used to trigger the execution of a process at the end of the backup.
If an error occurs, the description of the error is returned in addition to the error number.
The HErrorInfo function supports the hErrCode constant.
3 new SQL functions
3 new SQL functions are introduced in version 26. The SQL INTERSECT clause returns the records found in the 2 specified queries (Intersection).
These functions are:
  • INTERSECT: Returns the records found in the 2 specified queries (intersection).
  • YEAR: For compatibility with SQL code in MySQL.
  • MONTH: For compatibility with SQL code in MySQL.
automatic creation of INSERT query parameters
INSERT queries take as parameter the values of the items of the record to be added.
However, you have to create a parameter for each of these values!
In version 26, the query editor generates a parameter by default for each value.
SQL code editing
Any identifier (item name, parameter, etc.) selected in the query editor is highlighted wherever it is used in the code editor.
Password management for data files opened indirectly
HFSQL Spare is a near-real-time backup of a server.
HFSQL Spare now allows you to check the integrity rules of linked files that have secure encryption.
HFSQLDrive: New portal
The HFSQLDrive portal offers an improved UX:
  • Simplified configuration and creation of an HFSQLDrive database
  • Simplified configuration and creation of an SCMDrive team
  • Improved interface.
Practical aspects
The HFSQL Control Center benefits from many practical improvements.
  • These items (columns) can be displayed in alphabetical or logical order.
  • Upon reconnection, the HFSQL Control Center automatically sets the position on the last table edited and reopens the previously opened tabs.
  • It is now possible to search in the list of replications of the server.
  • GDPR items are identified.
  • The log can be cleared from the Control Center.
Native MS SQL Server Connector for Linux: Useful for Docker
The Native MS SQL Server Connector (available separately) is now also available for Linux.
It allows a native connection to MS SQL Server.
It can also be used to deploy a site or a Webservice that accesses an MS SQL Server Linux database via Docker.
AS/400: Management of nested structures defined in PCML files
One feature stands out among the many new features of the Native AS/400 Connector (available separately): IBM program calls that take nested structures and array structures as parameters.
Discover all the new features of the Native AS/400 Connector at WINDEV.COM.
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 of French government services.
All companies must use Chorus Pro to send their invoices to the French government services.
Version 26 takes into account the latest changes to the Chorus Pro APIs, and makes it easier to automate the invoice submission process.
Generate key as a sequence of words
Private wallet keys must be kept secret.
These are 256-bit keys.
To handle them more easily, the BufferToPhrase and PhraseToBuffer functions now make it possible to transform these numerical keys into a sequence of words.
These words are taken from standard dictionaries (Bip39), which are provided in English, Spanish and French.
You can use your own dictionaries.
Version labels
The data collected via telemetry is grouped by software version number.
When many versions have been deployed, it can be difficult to find your way around.
In version 26, you can attach a descriptive label to a version number.

Manage HD & 4K screens
In earlier versions of WINDEV, automatic tests had to be run on screens with the same resolution as the one used to record such tests.
In version 26, tests can be run on a screen with different resolution. For example, a test recorded on a 4K screen can be run on a 1920 x 1200 screen.
Application monitoring without network share
In version 26, it is no longer necessary to set a network share between the machine that hosts the robot and the machines on which the applications to be monitored are run.
This simplifies the implementation of the robot.
Test frequency
It is now possible to create test frequency profiles.
Now you can change the frequency of 150 tests in one single operation!
User profile
The user profile is used to specify the means of communication that the robot must use to transmit the test report.
It also allows you to select the tests that will be displayed by default in the application.
Network administrator: Select relevant alert messages
Network administrators can now select the type of messages they want to receive. This ensures they will receive ony relevant messages.
Webhook management: Automatically execute an action based on the test results
A Webhook can be associated with each test.
This Webhook is used to start any process each time the status of the test changes.
For example, if a serious error is detected on an operating site, it can be used to automatically display a "Maintenance in progress" page on this site, or to switch automatically to a backup server.
Available example: Service status website
An example of a service status website (similar to Staytus) is provided. This example can be associated with the robot, and show the status of the different services that are managed in the monitoring robot: messaging, IP telephony, sales site,...

For MongoDB databases, the new MongoGridFSSendFile WLanguage functions returns 2 values (tuple): a boolean and a MongoGridFSFileInfo variable which is used to directly retrieve the identifier of the added file.
Minimum version required
  • Version 26
This page is also available for…
Click [Add] to post a comment