Help / New features / New features in version 28
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WindowsLinuxPHPWEBDEV - Browser code
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Stored procedures
New Kanban control
The new Kanban control stands out as one of the most versatile new features in version 28. All the features of a Kanban board become available by simply dropping the control onto a window or page.
For more details, see The Kanban control.
What is Kanban?
Originally, Kanban is a Japanese method aimed at improving processes for a better, more efficient production cycle.
Today, Kanban also refers to a method in which tasks are visually classified, allowing for better task management.
Each task is written on a "card" that will move to a different list (column) according to its progress status.
In addition to tasks, these cards can represent any other type of resource: user story, requirement, suggestion, manufacturing stage, delivery, troubleshooting, etc.
A Kanban board is commonly shared between several users.
Each member of the team knows the progress status of the project, and knows what both themselves and the other members have to do.
In addition to better communication, this card-based method provides a clear overview of the production chain and the progress of the tasks, thus allowing members to easily identify bottlenecks and priority tasks.
For more details, see The Kanban control.
Kanban control: main features
The Kanban control in version 28 includes all the features that users expect:
  • define lists (columns)
  • create and edit cards
  • remove cards
  • move cards: vertically to change priority, horizontally to move to another list
  • manage user rights
  • ...
All these features, included directly in the control, are available to the end users of your applications and sites. You can also handle these features programmatically.
For more details, see The Kanban control.
Kanban control: lists (columns)
The number of lists (columns) can be defined programmatically or via the 7-tab window.
There are many options for each list:
  • title
  • appearance: background color, separation color, etc.
  • background image
  • width: fixed or proportional
  • number of cards in the column
  • maximum number of cards per column
  • "+" button to add cards
  • ...
These options allow you to fully customize the Kanban board.
Note: you can write Markdown text.
For more details, see The Kanban control.
Kanban control: cards
You can customize the appearance of cards.
A default card template is provided.
A major advantage of these cards is that they can contain Internal Windows or Internal Pages, and thus contain any kind of control.
You can customize all cards at once, one by one, or even customize groups of cards.
The height of a card can vary.
The width of a card depends on the width of the column, but can also be set manually.
Kanban cards are fully customizable. They contain Internal Windows or Internal Pages
Kanban cards are fully customizable. They contain Internal Windows or Internal Pages
For more details, see The Kanban control.
Kanban control: save the details of your cards
By default, the characteristics of a Kanban board are stored in a data file.
You can manipulate the data format as required.
As for the structure of the data file, simply define the items that will contain the details of the Kanban board:
  • list
  • priority
  • card text
  • card owner
  • label
  • date
  • ...
A full example based on an HFSQL data file is provided.
Data binding (automatic link between the card and the data) is available for even easier programming.
Please note that bi-directional data binding is enabled by default.
Of course, you can also populate and save the Kanban board programmatically.
Kanban control: manage user rights
The Kanban control allows you to manage user rights:
  • move cards vertically (change priority)
  • move cards horizontally (change list)
  • create cards
  • edit cards
  • remove cards
  • ...
You can manage rights programmatically..
Kanban control: programming
You can manage various features of the Kanban control programmatically:
  • the appearance of the Kanban control
  • the content of the Kanban control
  • the management of rights
The Kanban control, as well as the lists and cards have properties that allow you to configure all these elements.
You can add and remove lists and cards programmatically.
kbCard, a new native WLanguage type, allows you to handle the content of a Kanban control.
The kbCard type contains the following properties:
  • title
  • priority
  • text
  • contributor
  • date
  • optional internal window or page to customize a given card
  • ...
You can handle lists programmatically, just like you handle columns in a table: it's a skill you already master!
Code sample:
// Iterates over pending tasks for the contributor "JohnDoe"
FOR EACH Card OF KB_Sprint.TaskToDo.Cards
IF Card.Contributor = "JohnDoe" THEN
For more details, see Kanban control functions.
Kanban control: new programming events
New programming events have been introduced to allow you to easily handle Kanban controls:
  • select a card,
  • double-click or long press on a card,
  • move card vertically,
  • move card horizontally,
  • add a card,
  • remove (archive) card,
  • ...
All the events you need to use the Kanban control in your application or site are at your disposal.
For more details, see Kanban control events.
Kanban control: new WLanguage functions
To allow filtering elements in Kanban controls, the new WLanguage KanbanFilter function has been introduced in version 28.
A cross-platform Kanban control
You can use the same Kanban control in WINDEV, WEBDEV and WINDEV Mobile 28.
All the main features are the same, with some adjustments for mobile and web to better take advantage of each platform.
For example, the control adapts to portrait mode on mobile devices.
Kanban control: export to PNG
You can export a Kanban board as a PNG image using a new WLanguage function: KanbanToImage.
Kanban control: print
You can print a Kanban board as an image at any time.
This opens a wide range of possibilities.
Kanban control: miscellaneous
  • Margins: around lists, between lists, between a card and a list, between cards
  • The "+" button used to add cards can be customized using an Internal Window or an Internal Page.
8 new Smart controls
Version 28 includes 8 new Smart controls:
  • Multi-selection with tokens
  • Badge
  • Address autocomplete
  • Show more
  • Looper with image and filter
  • Advanced tables for the web (3 Smart controls).
Spreadsheet: insert a formula in a cell programmatically
Now the Spreadsheet control allows you to programmatically insert a formula.
In version 28, you can create spreadsheets with calculations without using the Spreadsheet control.
Spreadsheet: merge cells programmatically
In version 28, you can merge cells of a Spreadsheet control programmatically.
Spreadsheet control: scientific notation support
Now you can enter numbers in scientific notation in the cells of Spreadsheet controls.
Example: 1,23E+10.
Spreadsheet control: miscellaneous
  • Rich layout properties for printing: page size, orientation, margins...
Word Processing control: as-you-type spelling checker / glossary
The Word Processing control now lets you implement an automatic spelling checker. This feature also allows the creation of an automatic glossary.
Word Processing control: other improvements
  • In the code: ability to search for an element using its internal name.
  • Pressing Shift+F3 converts the selected text to uppercase.
New Chart control: Polar Area
A new type of chart is introduced in version 28: the Polar Area chart.
This type of chart is mainly used to compare target values or market shares, or to illustrate a progress percentage. The value is not represented by the angle of the segment, but by the radius.
Polar Area chart
Polar Area chart
New Polar Area chart: programming
The Polar Area chart control can be populated programmatically, just like any other chart control.
You can manipulate this type of chart using grXXX functions.
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, etc.
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.
Transform existing WINDEV elements into a SaaS application
Developers often need to transform Windows applications (or parts of applications) into dynamic websites or SaaS applications.
WEBDEV 28 allows developers to use their existing WINDEV projects and take advantage of the SaaS features that come as standard.
What is Markdown?
Markdown is a lightweight markup language that allows you to apply formatting to text. It works on all platforms: PC, Web, Mobile.
Because of its simplicity and practicality, Markdown is easy to read, learn and remember.
For example: wrap text in double asterisks (**) to apply bold formatting, use # at the start of a line to create a title, ## to create a subtitle, etc.
Markdown in all types of text: control captions, column headers, menu options, tooltips, etc.
In version 28, you can easily write and format "text" in many UI elements using Markdown (without gPen, gImage, etc.).
This may include, for example:
  • static text in an Edit control
  • static text in a menu option
  • a column header
  • a tooltip
  • information text
  • ...
Convert Markdown text to PDF, DOCX or HTML
Use the new MarkdownToDOCX, MarkdownToPDF and MarkdownToHTML functions to convert Markdown text to those formats.
Diagram Editor control: freehand drawing
With the Diagram Editor control, you can now allow end users to draw freehand.
Each drawing can then be manipulated like any other object, in the editor or programmatically.
Diagram Editor control: new property on shapes to authorize specific actions
With the new ActionAllowed property, you can allow or prevent the user from performing specific actions on any shape in a diagram:
  • move
  • resize
  • select
  • edit text
  • delete
  • copy
  • ...
By default, all actions are available to the end user.
All the controls: The "Extra" property, even better than "Note"
You can assign additional content to a control programmatically, and get it later.
This is the purpose of the Note property, which stores strings.
In version 28, the new Extra property allows you to store "key/value" pairs of any type. This allows for more structured information compared to simple strings: objects, records, queries...
Internal Window control: it can be cleared
Now, you can "clear" the contents of an Internal Window control.
The ChangeSourceWindow function accepts "empty string" as a parameter.
Generate PDF forms
In version 28, you can create PDF forms using the report editor.
In addition to the controls available in the report editor, you can include the following types of controls in PDF reports:
  • Edit control
  • Check Box
  • Combo Box.
In version 28, you can create reports and include these controls to automatically generate interactive PDF forms.
End users will be able to enter data, print or save the form.
PDF form to fill out
PDF form to fill out
PDF Reader control: Integrated OCR
Generally, users can select text in standard PDF documents.
However, some PDF documents may prevent the user from copying text, for example, if the text has been scanned.
Now, this text can be retrieved using the native OCR integrated into WINDEV's PDF Reader control.
OCR is run on an area defined by the end user.
The automatic OCR can be used to get an IBAN present in an image, and allow users to copy/paste it afterwards.
The automatic OCR can be used to get an IBAN present in an image, and allow users to copy/paste it afterwards.
PDF files generated via a report are now 2 to 10 times smaller
A document can be composed of a series of reports and PDF pages.
Generating a single PDF document from this series of elements drastically reduces the size of the resulting file.
PDF in the background of a report: the resulting PDF file is 2 to 10 times smaller
A report can use a PDF document as background.
The report itself can then be generated as a PDF document.
The weight of the resulting PDF file (that already uses a PDF background) is reduced by at least 50%.
PDF file generation 2 to 25 times faster
In version 28, the PDF generation process is dramatically faster.
2 to 25 times faster, depending on the size of the documents.
Set the compression ratio and quality
The size of the PDF file varies depending on the quality level chosen
The size of the PDF file varies depending on the quality level chosen
In version 28, you can define the quality and weight of the resulting document by setting a compression ratio.
This allows you to adapt the size of the document: the lower the quality, the lighter the document.
You can set this compression ratio with the new Quality parameter of the PDFSave function: Automatic, High, Average and Low.
PDF signature: let the end user know if a certificate is valid
The PDF Reader control shows a notification when a document is signed.
The user can see the details of the signature in the document reader.
In version 28, these notifications have been rewritten using non-technical terms. They are now clearer for the end user, thus providing better security:
  • invalid certificate
  • document modified after being signed
  • ...
PDF signature details shown to the end user
PDF signature details shown to the end user
Go to a bookmark programmatically
In version 28, you can set the position directly on a given bookmark.
To do so, you can use the new pdfBookmark type and its Title and PageNumber properties, the new Bookmark property, and the new PDFReaderGoToBookmark function.
Easily edit data files (tables): new, richer 7-tab window
The description of the data file properties has been simplified in the data model editor: this description now provides a better UX in the 7 tab-window.
Data file description tab
Apply changes to a set of tables (data files)
In version 28, the data model editor allows you to select a set of tables and apply changes to this set in a single operation.
You no longer need to make these changes on each description.
Duplicate item descriptions: in the same table or in another table (data file)
You can now duplicate an item description, both within the same table and between different tables (data files).
Representative icons
In the data model editor, an icon now appears next to the name of the item, and the font weight indicates the type of item: unique key, primary key...
Find what you need at a glance
Find what you need at a glance
New, well-spaced UI
The development environment in version 28 remains at the forefront of UI design and features a more streamlined interface.
Font size is slightly increased, for a more modern feel.
Automatic project migration: 2X faster
You can migrate a project by simply recompiling it in version 28.
In this version, this operation is twice as fast.
WLanguage script editor
Write, run and save WLanguage code in WDScript, the new built-in script editor
Write, run and save WLanguage code in WDScript, the new built-in script editor
Version 28 includes a WLanguage script editor.
It runs as a stand-alone application, for greater flexibility.
This editor features syntax highlighting.
Run WLanguage scripts
In version 28, you can create WLanguage scripts.
A script is a text file that contains WLanguage code.
This code is executed with WDScript, the new script editor.
Scripts allow you to easily create batch processes.
Get a notification when there is a new version of the environment
New toast messsages
New toast messsages
When there is a new version of the environment on PCSOFT's website, a notification appears and prompts you to install the update: a toast message appears.
Notifications in the environment: now easier to read
The notifications displayed in the environment become much easier to read.
You cannot miss them!
Controls: snap-on feature with the keyboard
In all the editors, you can move controls using the keyboard.
The snap-on mechanism is active while the control is moved: the control briefly stops at each location it can snap to.
In version 28, you can press 0 on the numeric keypad to see the gridlines.
Better control sizing handles
Easy-to-select handles
Easy-to-select handles
In version 28, controls feature easy-to-select handles.
When the control is moved, these handles disappear and allow for precise positioning.
7-tab window: edit the image associated with the control directly from the style tab
Cell, Button, or Image controls, for example, can contain an image.
In version 28, you can easily edit this image from the Style tab, using a new edit button.
Edit the image directly
Edit the image directly
Unable to edit a control in the 7-tab window? The environment explains why
Sometimes a control cannot be edited in the 7-tab window: the content of the tabs is grayed out.
There are many possible reasons: file in read-only mode, window not checked out from the SCM, control from a model without overrides, etc.
In version 28, the environment shows a message explaining why the options are disabled.
Image control: Live Data, images are shown in the 7-tab window
In version 28, the 7-tab window uses live data for images.
Whenever possible, an image of the database is used.
Actual representation of the image in the 7-tab window
Actual representation of the image in the 7-tab window
More intuitive style selection (7-tab window)
The style selection window is now more user-friendly.
Styles are sorted by relevance.
Image catalog: image editing
In version 28, the image catalog allows you to directly edit a selected image: crop, change colors, add text, etc.
You can edit the selected image directly
You can edit the selected image directly
Improve workflow with your favorite shortcuts
In version 28, you can define your own shortcuts in all the editors of the WINDEV, WEBDEV and WINDEV Mobile environment:
  • Project editor
  • Data model editor
  • UML editor
  • Window editor
  • Page editor
  • Query editor
  • Report editor
  • Help editor
  • Image editor
  • Code editor
  • Test editor
  • Flexible modeling editor
  • Setup editor
  • Software Factory action plan editor
  • Webservice editor
  • Telemetry widget editor
  • ...
Redefine existing shortcuts
You want to change a shortcut key combination?
Go to the ribbon and open the list of actions available in each editor. Then, simply enter the desired key combination.
Create new shortcuts
In version 28, you can create shortcuts for any action, even for actions that do not have a preset shortcut.
In the ribbon, go to the "Home" tab, expand "Options", and then select "Customize keyboard shortcuts" to open the list of actions available in each editor. Then, simply enter the desired key combination.
Share your shortcuts
Key point: you will be able to use your custom shortcuts in future versions.
Additionally, you can export your shortcuts to another computer.
Forgot to enable anti-aliasing in your charts?
Charts may show jagged graphics if the anti-aliasing option is not enabled. The audit scans the entire project and identifies these charts.
Access page controls from a delayed task
As you know, it is not possible to determine exactly when a thread or a deferred task will execute a particular statement.
In the server code of a WEBDEV page, execution can take place when the page has already been returned, which poses a problem if you assign content to a control.
A runtime warning notifies you if this happens.
Additional location for contributors: remote work
The Project Monitoring Center includes a new type of location for contributors: remote work.
This allows you to specify when contributors are working remotely.
Dates of leave of a contributor
In version 28, administrators can view the days of leave of contributors.
This allows for better organization.
Sprint management
The sprint management in the Control Center benefits from many improvements in version 28:
  • Sprint dashboard: New incident distribution and task duration charts
  • Sprint items: ability to assign a color, then filter and sort items by color
  • Filtering task and incident backlog by contributor
  • Ability to filter incident backlog items by type
  • Numerous sorting and filtering options
  • New chart to view the number of issues created and fixed by a given contributor
  • Ability to associate multiple images and attachments with the same incident
  • ...
Automatic generation
Continuous Integration now allows you to automatically generate the technical documentation of the project.
To do so, a specific action is now available in the Software Factory.
Automatic technical documentation
The new "Generate project technical documentation" action is introduced in version 28 to generate the technical documentation from the Software Factory.
New action to migrate a project
Continuous Integration now includes the "Migrate a project" action to recompile a project coming from an earlier version.
New action to deploy an app to a Private Store
Continuous Integration now includes the "Deploy to a Private Store" action to automatically deploy an application to a Private Store.
Login window: sleek Windows 11 style
The new default login window
The new default login window
In version 28, the User Groupware login window has been revamped.
Now, this window uses a modern Windows 11 design language.
Reminder: this window is fully customizable.
OAuth: support for organization
The User Groupware supports OAuth authentication.
In version 28, the User Groupware allows you to log in as part of an organization.
GIT clone: progress bar
A progress bar is now displayed when cloning a project.
GIT: SSH authentication
SSH is a secure communication protocol.
You can now connect to a Git server using SSH, without having to re-enter your username and password.
GIT: open a git project from the software factory
The Software Factory (Continuous Integration) includes a new action to open (clone) a Git project automatically.
GIT: branch: create, switch, merge
You can now create, switch and merge branches of a project in Git directly from the editor.
GIT: miscellaneous
  • The name of the Git branch is displayed in the title bar of the editor.
Integrated image editor: take advantage of all the new features of the Image Editor control
The image editor available in the environment benefits from all the new features of the Image Editor control introduced in version 28: animated GIFs, scan, etc.
Use languages not included in the project during reintegration
A report may use languages other than those defined in the project.
By default, when reintegrating translations, WDMSG only includes the languages defined in the project.
Now, you can use additional languages when reintegrating translations.
Support for very large projects
WDTRAD and WDDIXIO, the two modules included in WDMSG now support an unlimited number of messages to be translated.
Diff and Merge operations optimized for the analysis (data model)
In version 28, the SCM environment allows you to better manage branches for versions of the analysis.
Many new cases are automatically managed.
Action Bar: automatically included in diff and merge operations
In version 28, both diff and merge operations take Action bars into account.
Merge: hide identical changes in two branches
Sometimes, identical modifications are manually copied to two different branches.
For a clearer merge, it may be better to hide such changes.
This option is now available in version 28.
SCM: miscellaneous
  • Better management of shared elements (internal components, windows, etc.) when switching to a newer version of the environment
  • Stored queries and stored procedures: taken into account in diff and merge operations.
2X, 3X, 4X faster workflow in the editor
The code editor is much more responsive in version 28. In most cases, it is twice as fast, and up to four times faster when working on large sections of code!
This makes for a much smoother workflow.
7 new shortcuts in the code editor
7 new handy shortcuts have been added to the code editor in version 28.
of course, they add to the list of existing shortcuts!
  • Right Arrow at the end of a line: Goes to the next line
  • Alt+Shift+Arrows: Allows you make a rectangular selection (just like Alt+mouse cursor).
  • Ctrl+Shift+Backspace: Deletes all the content of a line to the left of the cursor
  • Ctrl+Shift+Del: Deletes all the content of a line to the right of the cursor
  • Addition to Ctrl+/: Comment out a selection using /* and */
  • Ctrl+Shift+E (Element): Selects the whole word at the cursor location
  • TAB: Validates autocomplete suggestions.
Reminder: In version 28, you can also create your own shortcuts in the editor.
Manage your own hashtags
Now you can use hashtags (with the # character) in your code comments (#TODO, etc.)
You can use any word as a hashtag.
A new window in the code editor allows you to view all the hashtags.
This window lets you navigate between instances of a hashtag in the code.
For more details, see: The "Code hashtags" pane.
Search the current code without using the mouse
When coding, developers often need to do a quick search in the current code.
The environment already includes a search functionality (Ctrl + Shift + F).
However, this requires using the mouse and setting the search options.
A new simple search mode in the current code is introduced in version 28.
The Ctrl + F keyboard shortcut opens this search box.
Instances are highlighted in the code as you type.
The number of occurrences is displayed.
Navigate between instances using F3 and Shift + F3.
You can replace instances with Ctrl + H.
Search in the code editor
The search in the entire project now starts at the current element.
Take tabs into account in multiline strings
Multiline strings are defined either with square brackets or with double quotes.
When a multiline string is defined with double quotes, the tabs contained in the string are preserved.
SQL query wizard available in the code editor
The powerful SQL query wizard, which allows you to generate SQL code without prior knowledge of SQL, is now available directly in the code editor.
Case-insensitive regular expression
You can use (?i) to make the regular expression case-insensitive.
For more details, see: RegexMatch.
Real-time and log-based analysis of processing times
The orange bar indicates where a bottleneck occurs
The orange bar indicates where a bottleneck occurs

This new feature makes it easy to find bugs and causes of slowdowns in your applications.
Whether in real time, or later using a log file, you can analyze the execution time of each process, thread or application.
Quickly detect the source of slowdowns: CPU-intensive threads, blocking transactions, callbacks to a long process, long loops, etc.
Optimize your code straight away.
Improved runtime log (dbgEnableLog)
Analyzing runtime logs is easier in version 28:
  • The log file loads instantaneously.
  • The content of the log file is refreshed to limit the size file. Old content is automatically replaced
  • An interactive log analysis mode is introduced: usage graph, etc.
For more details, see Runtime log.
An integrated DevOps environment
WINDEV, WEBDEV and WINDEV Mobile version 28 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, etc.
Report creation: more efficient wizard
The report creation wizard in the report editor has been revamped.
Its has become much more intuitive.
Form report: even more powerful
In a form report, in addition to the usual Edit controls, you can insert Check Box and Combo Box controls.
Ability to change the order of iteration blocks
By default, iteration blocks are displayed in a report in the order in which they were created.
In version 28, you can change this order in the editor, so that the blocks are displayed in the logical order.
All about print requests
The report viewer allows multiple export requests.
The iDocumentPrinted function now returns a list of all the print jobs and exports requested by the end user, as well as their settings: destination, paper size, orientation, file name, etc.
Get the list and type of parameters expected by a report
Reports & Queries allows the end user to create reports.
When the user prints these reports, the application must pass the expected parameters.
The new GetDefinition function in WLanguage gets the prototype of a report: list of parameters and their type.
Report editor: miscellaneous
  • Splitter to resize the width of the minimap.
  • Markdown text formatting is now supported in reports.
Contour detection
The new AIDetectContour function detects contours in an image.
The function returns an array of polygons of all the shapes that have been detected in the image.
AI detects contours
AI detects contours a cloud to develop and deploy your projects
  • WEBDEV Application Server to host WEBDEV sites
  • Cluster of WEBDEV Application Servers
  • WEBDEV Application Server to provide web services
  • SaaS platform
  • Private Store for WINDEV and WINDEV Mobile applications
  • Telemetry platform
  • HFSQL server to access databases.
  • HFSQL Spare, to set up HFSQL backup servers
  • Universal data replication server
  • Mobile User Groupware
Development environment:
  • Project Virtualization Platform: Private SCM, Control Centers, Dictionaries.
SCMDrive and HFSQLDrive are purpose-built clouds:
  • for SCM data sharing.
  • for hosting HFSQL databases.
Unusually slow application? see what's going on
We've all been there: An application randomly slows down, without explanation.
WINDEV 28 helps you determine and fix the cause of the problem.
The Real-Time Performance Profiler (RTPP) displays an application activity chart. The data can be shown in real time, but also come from a log file.
This chart allows you to identify bottlenecks and causes of low performance.
Dynamic chart...
The chart represents the application activity.
Data is shown in real time.
The chart uses two levels:
  • The low level indicates that the application is in idle state. This means it is waiting for a user action (click, etc.)
  • The high level indicates that the application is in use. This means it no longer responds to end-user actions.
You can scroll forward or backward through the chart, zoom in, and more.
High levels that take too long appear in red.
Click a high level section to see all the function calls, execution time of each function and even the code of these functions.
By analyzing the code, you can identify the cause of slowdowns.
Real-time or log-based analysis
There are three analysis modes:
  • real time on the development computer (during tests)
  • real time on a production computer
  • later on, using a log file.
Use dbgEnableLog to write to the log file.
RTPP: multithreaded apps as well
The RTPP also supports multithreaded applications.
The chart shows the activity of the different threads, and allows you to analyze possible cases in which threads block each other: thread waiting for synchronization, multiple threads waiting for tasks...
New type of string: undetectable (encrypted in memory)
The new <undetectable> attribute automatically obfuscates the content of the string in memory.
The content of the undetectable string cannot be read in a memory dump file.
For more details, see Character strings.
Create your own WLanguage functions (Prefix syntax)
"Extension functions" allow you to add your own WLanguage functions to types.
The functions you have defined can then be called as native WLanguage functions.
For example, you can create a function that replaces Tab characters with spaces in a string.
Your functions appear in the code completion drop-down list for the given type.
Your function appears (in green) in the completion suggestions
Your function appears (in green) in the completion suggestions
Note: these functions can also be used in standard syntax.
Advanced type to read files on disk
The new DiskFile advanced type allows you to effortlessly handle files on disk, without having to manipulate handle numbers: binary file, parameter file, text file...
Prefix syntax is therefore available.
Code sample:
Important automatic security mechanism: the file is automatically closed when the variable is released.
The DiskFile type also allows you to handle temporary files.
The file is automatically closed and deleted when the variable is released.
Insert calendar invites into email messages
In WLanguage, you can easily create email messages using the Email advanced type .
In version 28, the Attach property can be used to insert one or more appointment invites in the email message.
The email client will then suggest the recipient to add this appointment to their calendar.
Secure file transfer: new SCP functions
The new SCP functions allows you to send or retrieve files using the Secure Copy Protocol (SCP).
SCP can be compared to a secure FTP.
For more details, see SCP functions.
Socks5 proxy
SOCKS5 is a network protocol for exchanging data through a proxy.
Version 28 natively supports this protocol.
The Proxy, SocketProxy and FTPProxy WLanguage functions allow you to specify the address of the SOCKS5 proxy.
Exchanges via HTTP, FTP, SFTP, socket, web services, etc. use this type of proxy.
Local procedures: public or private?
In version 28, you can define the scope of a local procedure and the global variables of the window or page: public or private.
Public procedures can be called outside the control.
Private procedures can only be called from within the control.
New image functions
Now, you have more possibilities to handle images:
  • the dRotation function has an option to adjust the image size after applying the rotation.
  • the dModifyContrast function has been introduced.
Conversions between ANSI <-> UTF-8 <-> UTF-16LE <-> UTF-16BE <-> UTF-32LE <-> UTF-32BE
UTF-16BE and UTF-16LE are Unicode encoding standards (LE for Little Endian and BE for Big Endian).
LE and BE use different byte orders
The new UTFConvert function allows you to convert strings between these formats.
Straighten skewed images
The new dStraighten function in version 28 allows you to apply perspective correction to an image.
This function is based on a homeomorphic algorithm.
The image is straightened
The image is straightened
Dynamic external component: loaded at runtime
In version 28, external components can be loaded dynamically, which means you don't need to include the component in the project.
The new ComponentLoad and ComponentExecute functions will prove extremely useful.
Combined with OOP interfaces, this new feature allows for a more cohesive architecture.
EAN bar codes
EAN bar codes allow you to align the text generated with the bar code.
Improved introspection
The GetDefinition function now also gets the complete prototype of window, page and report initialization processes.
Generate placeholder images with geometric patterns
The new GenerateGeometricImage function creates a random image containing simple geometric shapes. This image can then be used to fill the "photo" field on a user profile until the user provides their actual photo, for example.
Rather than leaving an empty, undefined image, you can fill that space with a geometric pattern
Rather than leaving an empty, undefined image,
you can fill that space with a geometric pattern
Check the format of administrative numbers
Version 28 includes new functions to check the validity of administrative numbers: SIREN, SIRET and INSEE.
This ensures you start searches using valid number formats.
Belgium: NISS, CBE and EU
Switzerland: OASI, UID and BER
Canada: SIN, BN9 and BN15
United States of America: EIN, FEI, SSN
Germany: IdNr, UStIdNr
Italy: CF, IVA
Spain: DNI, NIF
Brazil: CNPJ, CPF
Valid IBAN syntax
The new IBANValid function checks if an IBAN passed as parameter is valid.
This ensures you start searches using valid number formats.
Caution: this does not mean the account exists.
One single function to run OCR on a rectangular area
The new PicRectangularSnipOCR function opens the rectangular snip tool, gets the result of the selection, runs OCR and returns the resulting text.
Run OCR on an area
Run OCR on an area
Certificate integrated in the executable
Signing or encryption functions can use certificates.
In version 28, you can use certificates coming from a buffer in memory, and not only from a file on disk.
Encryption and signing: PEM and DER formats
Signing or encryption functions can use different certificate formats.
In version 28, in addition to P12 certificates, the PEM and DER formats are also supported.
Serial Ports: timeout
In version 28, you can pass the timeout as a parameter.
Invalid external descriptions (JSON, XML, etc.) now appear in compilation errors
A project can include external descriptions, for example for JSON or XML data.
WLanguage natively recognizes the associated contents.
In version 28, a compilation error is shown if an external description is invalid.
Associative array with key of type variant
You can create associative arrays with a key of type Variant.
Dynamic compilation: structures
The dynamic compilation now allows you to create structures.
Request UI refresh
The RequestRefreshUI function triggers the refresh request event of a window.
This function allows you to easily group UI modification processes.
In version 28, this function has been improved:
  • it can be used on Internal Windows.
  • it takes parameters that it will pass to the Internal Window.
  • it supports prefix syntax.
Thread that calls the main thread: no longer blocked
The new ExecuteMainThreadAsynchronous function is used to call the main thread without waiting for the response.
Procedure automations in the code editor also support this new option.
Runtime log
SOAP and REST webservices created with WINDEV can generate execution logs on demand with the dbgEnableLog function.
These logs can be viewed later in the environment using the new Real-Time Performance Profiler.
64-bit test mode
You can test web services (via the GO icon) in 32 or 64-bit mode.
Rest web service: natively call REST APIs in WLanguage (OpenAPI documentation)
You can document REST web service APIs using an OpenAPl file.
This file can be imported into the project: the code editor recognizes the APIs described in the file.
These APIs will be called "natively".
Named, optional and mandatory parameters are supported.
The response is returned in an httpResponse type that contains the return code and the body of the response.
You can handle particular cases with the httpRequest type.
Sample code for the Swagger Petstore web service:
Dog is Pet = 745513 = "Noopy"
// Add animal
'Swagger Petstore - OpenAPI 3.0'.addPet( Dog )
Soap: Additional verifications when generating the web service
  • Web services can return classes. In this case, the developer must check the "Export class" option in the web service generation wizard. If this option is left unchecked, the wizard highlights the error.
  • If the type of the return value of a web service procedure is not specified, the compiler tries to determine this type. If the compiler cannot determine the type, the new "Strict mode" generates an error to encourage the developer to specify the type of this value.
  • When using SOAP web services, you can directly handle the array of structures returned by the web service procedure: no need to copy the arrays!
  • HTTP Get requests can send data (contain a payload).
XML import: compilation error if invalid syntax
The code editor allows you to import XML files and use them natively in WLanguage.
When importing an XML file into a project, a compilation error appears if the file format is not correct: missing closing tag, etc. (See new feature 134).
Mapping attribute: get it programmatically
In version 28, you can get the Mapping attribute of a class member programmatically.
New "Note" attribute
The new Note attribute allows you to specify details at class members level, and to access these details at runtime.
Controls, windows and pages can implement interfaces (as in OOP)
In OOP, an interface is a set of virtual methods to be implemented.
In version 28, all types of controls, windows, internal windows, pages and internal pages can implement interfaces.
Scope of procedures: between "public" and "private", there is "restricted" (internal)
In version 28, a new type of scope is available for procedures in WLanguage: the Restricted level (known as "Internal" in other programming languages).
In Restricted mode, the procedure is visible only to the other elements within the same assembly: same web service, same component, etc.
  • The Ancestor keyword can be called in global methods.
Python: protect your source code; execute precompiled scripts
In version 28, you can execute precompiled Python scripts: this means you no longer need to provide the source Python code.
Therefore, your source code remains inaccessible to other users.
Kotlin is a programming language mainly used for Android development.
In version 28, Kotlin is natively supported in WINDEV Mobile.
For more details, see Using Kotlin code.
The new ModbusSendRawFrame function sends a "raw" buffer to a Modbus device.
This enables communication with devices that do not strictly comply with the Modbus standard.
Nullable key
In version 28, you can indicate that a key is "nullable", i.e., that it can contain the Null value.
Null is different from zero, or from an empty string.
Now, sorting operations differentiate zero from Null values.
Primary key
A primary key is a unique key that cannot be Null.
In version 28, you can define primary keys. For example, automatic identifiers are usually primary keys.
HExecuteQueryAsynchronous is now faster
The performance of the HExecuteQueryAsynchronous function has been significantly improved.
Processing is now faster.
HTrack: don't block the application
The HTrack function notifies an application when another application makes changes on a given data file.
A callback procedure is then called.
The UI is blocked while this procedure is executed. If this process takes a long time, it will have a negative impact on the UX.
In version 28, you can specify that the callback procedure must be executed in a secondary thread. Thus, the user won't be blocked.
Docker and HFSQL: default password
To securely set up a database using a Docker container, the password of the administrator must be specified.
You can still use an administrator account without a password. Simply specify this option in the Docker recipe.
Simulate network speed
The HSimulateNetwork function simulates the speed of a network when testing an application.
Version 28 includes modern types of networks:
3G, 4G, 5G, DSL, Fiber, Cloud, custom speed.
This allows the developer to test the speed of the application according to the type of connection available to the end user.
Connection encryption: AES-256, AES-128, AES-192
In version 28, the connections between client computers and the database server can be encrypted using the Advanced Encryption Standard (AES). These standards are added to the already available encryption standards.
The new SQL ADD PRIMARY KEY INDEX function allows you to indicate that an item is primary key.
Improved top, bottom and limit functions: up to 12 times faster
The SQL TOP, BOTTOM and LIMIT functions have been optimized in version 28: They can be up to 12 times faster!
Query with parameters: see the executed code
A block of SQL code can contain parameters passed programmatically. The new SQLCodeExexecuted property gets the complete SQL code that was executed.
This allows you to copy/paste the code to check how it was executed, for example.
3 New SQL functions
3 new SQL functions are introduced in version 28:
  • ADD PRIMARY KEY INDEX: Adds a primary key in an existing file.
  • Optimize: Reindexes a file with the default parameters (hNdxNormal + hFTX + hBackgroundTask, 80% density).
  • GROUP_CONCAT: Concatenates non-NULL strings from a list of values (MySQL statement).
Better UI for the Cluster-specific HFSQL Control Center
The HFSQL Control Center has a specific interface for HFSQL Clusters.
This UI has been simplified in version 28 and is now more user-friendly.
Select relevant folders
HFSQL Spare is a near real-time server backup solution.
In version 28, you can select which subfolders of a database will be included in the backup.
This allows you to exclude folders whose content does not change (archives, log files, etc.) and thus reduce the amount of data to be transferred and stored.
Improve query performance: make sure the necessary keys have been defined
The HFSQL Control Center now allows you to check the presence of the keys needed for optimal performance, according to the actual data on the server.
This process analyzes the queries and highlights any missing keys, to get the best possible performance.
Adding a missing key can make a query execute immediately.
Automatic optimization task
Now, the error notification for automatic database optimization tasks also appears in the HFSQL Control Center.
Context copy
With Native Connectors, when copying contexts, now you have the option to set a separate connection between each context and the third-party database server.
This new feature is available for the following databases: MS SQL Server, Oracle, MySQL, Sybase, Progress, Informix, DB2, SQLite, MariaDB.
The Native Connector setup program now supports multiple languages: No need to manage one DLL per language!
Native SQL Server Connector
The Native SQL Server Connector supports two new Microsoft drivers for SQL Server: MSOLEDBSQL19 and MSODBCSQL19.
You can now directly import multiple tables into the database schema (Analysis) without going through a wizard.
Available in the code editor
The visual SQL query editor is now available in the code editor.
SQL code generated for joins
The visual query editor generates SQL code.
Until now, the code generated for a join was '='.
In version 28, an INNER JOIN code is generated instead.
Retrieve essential information
Now you can retrieve certain details from the TLS communication log between 2 systems.
For example, the TLS protocol used, or the list of ciphers used.
To do so, 2 new properties are introduced in version 28: SelectedSSLVersion and SelectedCipher.
For more details, see the help page on httpRequest variables.
New function: BitcoinValidAddress
The new BitcoinValidAddress function determines if a bitcoin address (BTC address that indicates the destination of a Bitcoin payment) is valid.
End user affected by an error
The telemetry system gets the details of errors encountered in the application.
End users can agree to sending non-anonymous telemetry information.
In this case, you can see the list of users who have encountered the error.
This makes it possible to send patches, identify particular cases, identify reproduction steps...
Drag & drop support: New EmulateDnD function
The UI automated test editor now supports drag & drop operations.
The editor allows you to record and replay them.
For more details, see the help about EmulateDnD.
Group of recipients
In version 28, you can send error reports to groups of recipients.
REST web service: GET, POST, PUT, DELETE
The robot allows you to send HTTP requests to check that the server is responding.
Now, you can use GET, POST, PUT and DELETE methods to send HTTP requests.
This new feature comes in very handy when testing some web services.
Mongo DB: batch operations
It is now possible to send a set of operations to the database in a single call: insert, modify, add, etc.
The new MongoExecuteOperations function and the mongoOperation types allow you to manage these batch operations.
Minimum version required
  • Version 28
This page is also available for…
Click [Add] to post a comment

Last update: 06/13/2023

Send a report | Local help