Brochure of new features: Common new features
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.
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.
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.
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:
- 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.
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 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:
- card text
- card owner
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.
type contains the following properties:
- 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!
// Iterates over pending tasks for the contributor "JohnDoe"
FOR EACH Card OF KB_Sprint.TaskToDo.Cards
IF Card.Contributor = "JohnDoe" THEN
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.
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
- 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.
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
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
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:
- edit text
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.
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 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.
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
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
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
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.
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).
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
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
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
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
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
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
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
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.
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
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
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.
- 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.
- 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.
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.
Real-time and log-based analysis of processing times
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.
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.
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
pcscloud.net: 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
- HFSQL server to access databases.
- HFSQL Spare, to set up HFSQL backup servers
- Universal data replication server
- Mobile User Groupware
- 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.
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.
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.
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
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.
Important automatic security mechanism: the file is automatically closed when the variable is released.
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.
SOCKS5 is a network protocol for exchanging data through a proxy.
Version 28 natively supports this protocol.
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
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
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.
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
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.
France: SIREN, SIRET and INSEE
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
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
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.
SOAP and REST webservices created with WINDEV can generate execution logs on demand with the dbgEnableLog
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
Dog.id = 745513
Dog.name = "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.
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.
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.
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
HTrack: don't block the application
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
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.
Add a PRIMARY KEY
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.
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
For more details, see the help page on httpRequest
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.
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.
This page is also available for…