2025 new features brochure: WINDEV new features
Benefit from the 208 common new features of version 2025 in WINDEV
WINDEV 2025 of course benefits from the 208 common new features of version 2025, including editor enhancements, code generative AI, palettes, the new segmented button, faster web services, code editor enhancements including the password vault, the new Imaged Percentage graph type, SCM enhancements, WLanguage and OOP enhancements, etc.
Use the GPU instead of the CPU
In version 2025, the framework's graphics engine adopts new technologies. Remember: the framework's graphics engine handles all aspects of application display and end-user interaction. It's an important element of the framework, conditioning both performance and display quality. Version 2025 now relies on the processors on the PC's graphics card. Today, this type of processor is far more powerful than the one on the PC motherboard. Its use also frees up motherboard resources. This technology is based on Direct2D. Your application windows display much faster.
The end of GDI handle creation: Windows resources saved
Another major new feature of version 2025 in the graphics engine is the possibility of no longer using handles for field control management. The greater the number of fields, the greater the gain when the window is opened. Another advantage of this new feature is that the absence of handles frees up Windows resources. Use of this technology is optional: calling the WLanguage function Handle is still possible, of course.
Legacy or modern internal graphics engine
For your applications, you have a choice of either project-level or window-by-window options. 3 graphics engine modes are now available: - history mode,
- history mode without handle,
- Direct2D mode without handle.
Note that the history mode is selected by default. The mode can be changed either for the entire project, when describing the project, or per window, using the new WLanguage function WinOptimize.
Palettes: really useful
The concept of palettes for your applications allows the end user to switch from light to dark mode, to the dominant Windows color or any other color you allow. It's a feature much appreciated by end-users. You can also programmatically change the background of the administration window to red (light) to distinguish it. See new products 007 to 023.
Example of a real-time palette selection window
New Segmented Button control
The new Segmented Button control makes it possible to present single or multiple choices in an up-to-date way, and to process choices easily.
Overview
Smart controls save valuable time during the UI creation process, and immediately make your applications more sophisticated. WINDEV 2025 introduces two new Smart control fields: - Creation of a QR code incorporating an image.
- Enter page numbers.
Generate a QR code with a central logo
To generate a QR Code including an image, simply specify the QR code content, the image to be embedded and its size in the QR Code. Remember: Smart controls are delivered with their source code, so they can be fully modified and customized.
Entering page numbers for printing
The new Smart control "Page sequence input" lets you enter a sequence of numbers and intervals. The most common use is to enter pages for printing.
Table file sortable on all columns
In version 2025, the Table field enables the user to sort and filter all columns, including non-indexed columns.
Miscellaneous
- WLanguage function BuildBrowsingTable offers a new feature that lets you specify whether text memos will be displayed as single-line or multiline.
New skin template for WINDEV
The "Apollon" skin template appears in version 2025. This allows for new customization possibilities. Benefit of this new feature in version 2025: Instant new look! Use these templates in your applications and software packages, as well as all the skin templates provided with WINDEV. Don't forget you can apply a palette to change colors, and also create your own skin templates. WINDEV includes everything you need to create superb UIs.
Repositionable notes with a new look
In 2025, repositionable notes go through the "fountain of youth" phase. Their look is in line with current trends.
New look sticky note
Programmatically customize groups of controls in each tab pane
As you know, it's possible to programmatically add panes to tabs. The content of the pane is an Internal Window. This Internal Window can contain groups of fields. And the same Internal Window is often used in several different panes. A programmed action on a group of fields, such as making it invisible, now allows you to specify the pane so as not to impact other panes.
Each block is differentiated
Tab panel: vector image + margin
The appearance of the tab could already be modified using an image. In version 2025, it is now possible to modify the appearance of the tab by setting its parameters via the "7 tabs". Visualization thus remains vector-based.
Example of shutter images (enlarged image) You can also define the margins between the various elements using the "7 tabs".
Editing pane tab content margins
Infinite RepeatString from above
A RepeatString Zone is filled from the top, as its name suggests. For best performance, filling takes place as the end-user moves through the site. See new feature 432.
Color with opacity: alpha channel
A transparent effect Opacity can now be applied to windows and window fields. This can be useful for applying certain style book guidelines.
Combo: different values displayed depending on whether the combo is folded or unfolded
In some cases, it may be useful to propose folded content that is different from the content of the drop-down list. The new DisplayedValueComboBox property has been introduced for this purpose. In version 2025, programming is no longer required to use this feature.
Here, the folded combo shows the area code, and the list shows the flag and country name.
Table in a RepeatString: make the table invisible
In a RepeatString containing a table, it is now possible to make a single-line table invisible.
In the middle of this screen, the order list has been made invisible (and a label has been added - in red -)
Retrieve field element coordinates
A field is made up of different elements: its label, the input zone itself, any integrated button, the combo button, table headers, the scroll bar... For special applications, such as programmed popup alignments, it may be necessary to retrieve the coordinates of the various elements. The WLanguage function ControlRectangle retrieves this type of coordinate in the form of a "rectangle": coordinates + width and height.
The PopUp is displayed exactly below the
Black & white icon: color can be applied
You can change the color of a black & white icon by selecting the new "Force to monochrome" option in the "7 tabs", Style tab.
Change icon color
Field: miscellaneous
- Text display using the gFontItalic function has been improved.
- New loading error treatment for fields HTML FIELDS.
- It is now possible to specify a callback for filling the images in the field ImageList field.
- New function HeightAdapted: calculates the height required for a field to display its full dynamic content.
Change your look with palettes
Every new skin template and most of the old ones now use a palette. Numerous pallets are delivered by default, including: To change palettes programmatically, simply use the new WLanguage function FenPaletteChange. Pallet changeover is carried out in real time.
Personal colors and light/dark themes
In addition to the colors available in the palette, it is sometimes necessary to use custom colors. In version 2025, for each new color defined, it is possible to specify a color to be used in the other mode. For example, if we define a color named "Warning", this color will be "red" in light mode, and "pink" in dark mode (because red doesn't show up on a black background).
Automatically modified buttons, icons and graphs
The contents of the icons and buttons are automatically modified to take account of the automation mode. Graphs are also suitable for. Note that an option allows buttons and icons to switch to monochrome mode when changing modes.
Example: general sales conditions on the back of an invoice
A printed report may contain different types of content on the front and back of the page. A typical example is an invoice, printed on one side of a sheet, with general terms and conditions of sale printed on the reverse. In version 2025, it becomes possible to use 2 different states to print documents.
How it works
The new WLanguage function iInitReportVerso is used to specify the name of the report to be printed on the reverse side. This report can be printed on a single page, or on several pages. If there are more pages on the reverse side than on the front side, you can use "blank" pages on the front. You can also use a PDF document on the back of each page.
Code example
The code is simple:
iInitReportVerso(RPT_GTC)
iPrintReport(ETAT_Facture, numero_facture)
Print preview
The preview of a report containing a different front and back side shows the pages side by side.
Help editor
In version 2025, it is now possible to insert diagrams created using the Diagram field in help pages. This facilitates visual representation.
Common new features
The WINDEV environment benefits from the common new features of version 2025 (see new features 048 to 058 ). In particular, the boosted speed, the choice of vocabulary, the new shortcuts, the new panes, the more practical project explorer, the evolutions to the code editor, etc.
Segmented button control overview
The new Segmented Button field can be understood as a set of ON/OFF buttons grouped together in a single field. By default, this control uses a cohesive design language. As users expect, the control supports single or multiple choices. The content of each choice can be a text or an image. Programming is much simpler.
New Segmented Button control: field creation
The main parameters: - number of squares,
- box contents,
- single or multiple choice,
- anchoring options and automatic width adjustment,
- separators,
- separator style,
- outer borders and button borders,
- ...
You can transform a Check Box control into a multiple-choice Segmented Button control, or a Radio Button control into a single choice Segmented Button control.
Simple programming
Programming a Segmented Button is much simpler than programming a set of Radio Button, Check Box or Switch controls. In the code of a Segmented Button control, you can: - get the state of one of the buttons,
- gray out or hide a button,
- change the label or the tooltip,
- add options dynamically,
- multilingual labels,
- persistence,
- images, Markdown text,
- ...
Other use
One use for Segmented Buttons that you might not think of is a selection UI with many different choices.
Select one or more choices,
with simple programming
Miscellaneous
- Exclusive Segmented Button animation: the selection moves to the new choice when the state changes.
A powerful concept
Reactive Procedures are used to automatically trigger the execution of processes. A Reactive Procedure is executed when a variable or the value or content of a field used in the procedure is modified, either by the end user or by programming. The Reactive Procedure continuously "observes" the variables and fields concerned to detect changes in value, and in this case runs automatically. A variable or field changes? The Procedure is executed!
A simple example
Why create a Reactive Procedure? Well, it's really very practical. Let's take a simple example: entering an amount before or after tax.
When an amount is entered in a control, the other controls update automatically. Of course, you could write this operation in WLanguage, directly in each control. In this case, you need to create a procedure that performs the calculation, and place the call to this procedure in the Modification Processing of each of the 3 fields. With a Reactive Procedure, all you have to do is write down the calculation formula and that's it. With 2 or 3 fields, it's still simple, but imagine with 5 or 6 fields, and the risks involved in making a modification. And how do you handle a programmed change of value in one of the Edit control fields? With a Reactive Procedure, there's nothing to program, and the procedure is carried out automatically: no forgetting.
Unique and centralized code
The main advantage of this method is that monitoring for changes in field values is delegated to the. There's no need to write the calls in every control where changes can be made. Resource consumption is zero, as the framework takes care of everything in an optimized way: it's the field or variable that automatically signals their change of value to the Reactive Procedure. The single, clear code of the Reactive Procedure therefore makes it possible to "monitor" and update several different fields and variables.
How to declare a reactive procedure
Keyword Reactive keyword indicates that the procedure must monitor the variables and fields used in its code. And, of course, to execute in the event of a modification.
REACTIVE PROCEDURE CalculateTTC()
A Reactive Procedure can be a global procedure (and therefore permanently reactive), a local window procedure or a local field procedure.
Reactive procedure options
Reactive Procedures offer 2 options: - Deadline: execute after a given deadline. For example The procedure will run 100 milliseconds after a value change.
REACTIVE PROCEDURE CalculateTotal() <delay = 100ms>
EDT_TOTAL = EDT_SUBTOTAL + EDT_SUBTOTAL * (EDT_VAT+1) /100
- Execution: a Reactive Procedure can be programmatically triggered.
Cascade
A Reactive Procedure can modify a variable or a field used by another Reactive Procedure. In this case, the other Reactive Procedure will run. The framework implements the necessary security mechanisms to avoid calls in a loop, for example.
Determine if a control is observed or modified by a reactive procedure
To know that a field can be modified by a Reactive Procedure, simply look at the bottom left of the field's "7 tabs" window. - the "23" icon indicates the number of times the field is used in the code.
- the "7" pictogram indicates the number of times Reactive Procedures have been used.
Clicking on a picto opens the list of uses (cross -references).
Practical example
Desired processes in this window: - Disable the three radio button options, the two combo boxes and the OK button, until the check box is selected.
- Once the user selects the check box, enable all the options.
- When the user selects the first radio button option, enable the first combo box and disable the second one.
- If the user selects the 2nd option, the first combo must be grayed and the 2nd combo must be un-grayed.
- If the user selects the 3rd option, and so on.
With a Reactive Procedure: 11 simple lines of code! In this example, all you have to do is create a Local Procedure in the window, declare it as Reactive, and that's it!
REACTIVE PROCEDURE Gestion_Livraison()<delay=1s>
GR_LIVRAISON..Grayed = True
IF INT_CGV[1] = True THEN
SEL_MODE_LIVRAISON..Grayed = False
ACCORDING TO SEL_MODE_LIVRAISON
CASE 1
COMBO_ADRESSE..Grayed = False
CASE 2
COMBO_POINT_RELAIS..Grayed = False
CASE 3
END
END
END
Common new features
WINDEV's window editor benefits from common new features: palettes, new fields, field blurring, template update speed, etc, ... See new features 007 to 042.
Speed of the "7 tabs"
Version 2025 speeds up the opening and use of the "7 tabs" and makes them even more fluid.
New modifier
The new modifier in version 2025 makes it easy to modify fields. See New 062.
New creation section
The field creation component appears in version 2025. It makes it easy to choose which field to use. See Novelty 065.
Flexbox: visualizing nesting
Flexbox editing is made easier in version 2025 by the ability to view all Flexbox nestings. See new feature 772.
Flexbox: check content positioning
When creating or editing a Flexbox control, fields are integrated into the Flexbox. When one of these fields is resized or moved, the field repositioning algorithm is automatically deactivated to facilitate handling. In version 2025, this positioning algorithm can be run from the window editor. The fields will then be correctly positioned. This positioning will be saved.
Miscellaneous
- Ui error when the content of a combo is empty in one of the languages.
RAD MVP: providing your model
It's now possible to supply a template class that will be used to generate MVP templates (the "M" in MVP). This automatically implements the code that must be present in all templates.
User Groupware: common features
WINDEV User Groupware benefits from new features common to all User Groupware: OAuth, SSO, ... See novelties 076 and 790.
New choice: remember me
For all applications compiled with version 2025, end-users have a new "remember me" option when entering their login. For security reasons, this feature can be disabled.
Update notification integrated into the application itself
When a new version of an application is available, the end user can be notified either when the application is launched, or via a Windows notification. In version 2025, end-users can also be notified directly from the application. This is a new Install option, which can be disabled.
Update notification available in the application itself
Highlighting of the most downloaded applications over the last 7 days
As you know, the Private Store supplied as standard lets you host your Windows, iOS and Android applications and links to your websites in a store hosted and managed by your company. New: the Private Store can now feature the most downloaded applications in first position.
At the front of the Store, the most downloaded applications
Store access authentication via OAuth server
Access to the Store can be defined from the OAuth Server available in the WEBDEV Application Server.
Miscellaneous
- The install UX of Store applications has been improved.
- iOS + Android mobile app in the Store; it becomes possible to install either as a cross-platform app, or as 2 apps.
Table: copy and paste entire row
In version 2025, a new FAA allows the end user to copy/paste an entire row into a view table.
A copy/paste of table line by FAA
The HTML editor field is used to search the Internet
A "line number" column added by FAA The HTML Editor field now allows the end-user to launch a direct Internet search on the selected word(s).
Thread type available in java
In version 2025, the Thread type is available in Java. This makes it easier to manage threads in Java. Secure threads are also managed.
Miscellaneous
- Cast operator available.
- property Extra is available on the advanced types concerned.
- Improved copying of class properties.
10 new Java functions
WLanguage offers 10 new functions for Java.
LINUX: Spin control
The Spin control is supported under Linux version 2025.
29 new functions 46 new linux constants for WINDEV
WLanguage offers 29 new functions and 46 new constants (to be discovered in the online help) for Linux.
Array: iénumérable parameter
Arrays can now be passed as parameters to DotNet functions that expect a parameter of type iEnumerable.
Common new features
Language remains the cornerstone of development. In version 2025, WLanguage in WINDEV is further enriched. It benefits from common new features and many useful evolutions: Reactive Procedure, OAuth, web service speed, encryption, explicit type conversion, unlimited Json size, etc, ... See new features 123 to 143.
Read and write to standard input/output streams
A WINDEV application can launch another application (another process) written in WINDEV or another language. This mainly concerns Console applications (launched from the command line). In version 2025, it is possible to read data from the standard output (stdout) and standard error output (stderr). It is also possible to write to its standard input (stdin). This allows you to control the process launched, and retrieve the process report.
Sending Windows notifications: UI settings
A WINDEV application can send Notifications that will be displayed in the standard way by Windows. It's now possible to set button colors or associate buttons with the input area.
Rich notification
51 new constants
51 new constants are available in WLanguage in version 2025: | | | | archi32 | archi64 | cmdStandardInput | cmdExitError | cmdStandardExit | crChamp | crEcran | crWindow | cryptAES192 | DeactivateOptimizedAnsiUnicodeConversion | docCopyModeShapeInactive | docModeCopyPermanentShape | docModeCopyFitOnce | foWithHandle | foDirect2D | foSansHandle | ftpIgnoreDeprecated | ftpIgnoreUnsafeLegacyRenegotiation | grPercentageImaged | hCTelemetryActive | hExecPlanningCancelled | hExecPlanningInProgress | hExecPlanningError | hExecPlanningTerminated | hlpCompleteSave | hlpDifferentialBackup | hNullIndexed | hNullIndexedCompoundKey | hNullNonIndexed | htrgHAjoute | htrgHEcrit | htrgHModifies | htrgHRaye | htrgHSuppresses | piVersion | rectHorizontal elevator | rectAscenseurVertical | rectExterne | rectInterne | rectGetLeftButton | relationshipAlternative | relationshipData | unspecified relationship | relationshipSource | relationSupplement | InvalidInputPreventExit | inputInvalidNonblocking | inputInvalidNothing | taCoolingIndicatorBas | taCoolingIndicatorHigh | password | |
5 new types
5 new types of variables are available in WLanguage:
3 new field properties
The WLanguage is enriched by 3 new properties for WINDEV.
49 new WLanguage functions for WINDEV
The WLanguage is enriched with 49 new functions for WINDEV version 2025:
| | AuthLogout | Logs out a user previously authenticated via:- the OAuth 2.0 protocol on any web service.
- the OpenID protocol on any web service.
- a JSON Web Token (JWT).
| AuthRevokeToken | Revokes a JSON Web Token (JWT). | AuthVerifyAuthentication | Retourne le token de l'utilisateur courant dans le cas d'une authentification SSO | BitcoinCoreBlockHash | Renvoie le hash d’un bloc par indice. | BitcoinCoreConnectionCount | Renvoie le nombre de pairs connectés. | BitcoinCoreDateTimeLastLaunched | Renvoie la date du dernier lancement de Bitcoin Core. | BitcoinCoreDiskSpaceUsed | Indique la taille sur disque de la blockchain. | BTLECharacteristicChangeOfValue | Enables or disables detection of changes in the value of a Bluetooth Low Energy characteristic. | CertificateExport | Exports a certificate from a certificate store to a "pfx" or "cert" file. | CertificatePEMToPFX | Converts a certificate in PEM format to a PFX file including the private key. | ChangePalette | modifier la palette utilisée par le projet ou un fenêtre | CmdAddArgument | Adds an argument to a command to be executed in console mode. | CmdAddOption | Adds an option to the command to be executed in console mode. | CmdExecute | Executes a command in console mode. | CmdGetExitCode | Gets the exit code of the command executed in console mode, i.e. the value returned when the command finishes executing. | CmdReadErrorOutput | Reads error output data for the command executed in console mode. | CmdReadStandardOutput | Reads standard output data, for the command executed in console mode. | CmdWriteStandardInput | Writes data to the standard input of the command executed in console mode. | ControlRectangle | Returns a rectangle corresponding to the specified area of a control. | DayInYearToDate | Returns the date (in "YYYYMMDD" format) corresponding to a day number in the year. | DocClearFormatting | Replaces the current formatting of a selection with the default formatting. | DocFormatPainterMode | Enables the format painter mode in the Word Processing control or determines if this mode is enabled. | EmailAppGetArchitecture | Gets the architecture (32 or 64-bit) of a computer's default email client. | ExecuteReactiveProcedure | Force l'exécution immédiate d'une procédure réactive. | GeneratePalette | Génère une palette à partir d’une ou de plusieurs couleurs de base. | GetPalette | Permet d'obtenir la palette courante du projet ou de la fenêtre. | GetVariableDefinition | Récupère la description d'une variable. | gImagePalette | Construit une séquence de caractères contenant une image monochome dont la couleur suit les changements de palettes | grCategoryTag | Initialize a category image with an image (thumbnail) in Sector, Doughnut or Hemicycle type charts. | grPIImage | Defines the image used to illustrate data in a "Percentage imaged" graph. | grPIVMaximumValue | Allows you to specify the maximum graph value for automatic calculation of percentages in a "Percentage imaged" graph. | HEnableSpare | Transforme un serveur Spare en un serveur HFSQL. | HImportCSV | Imports a CSV file into an HFSQL Classic or Client/Server data file. This data file must have been defined in the data model editor, or declared with HDeclare, HDeclareExternal or HDescribeFile). | HListHistoryPlanning | Lists the execution history of a scheduled item on an HFSQL server: scheduled task (stored procedure), backup, optimization, refresh of a materialized view). | HRplAddFile | Adds a file to a universal replication. | HS DeleteAllHistoryPlanning | Purge the entire execution history of scheduled elements on an HFSQL server. | HSuppressHistoryPlanning | Deletes the execution history of a scheduled item on an HFSQL server: scheduled task (stored procedure), backup, optimization, refresh of a materialized view.). | iInitReportVerso | Initializes the parameters of a report to be printed on the verso side of another report. | InRecycleMode | Indique si le mode recyclage des sessions prélancées (de webservice) est activé | JSONOpenReader | Ouvre un lecteur JSON. | LoadImageProcedureList | Specifies the procedure to be called when displaying a line in a List Box control. This makes it possible to display a calculated image rather than one stored on disk. | LooperAddBeginning | Adds a row at the beginning of an Infinite Looper control. The row is inserted before the first row in the Looper control. The scrollbar of the Looper control remains at the same position. | LooperAddIWBeginning | Adds a row consisting of an internal window at the beginning of an Infinite Looper control. The row is inserted before the first row in the Looper control. The scrollbar of the Looper control remains at the same position. | PaletteLoad | Charge une palette à partir d'un fichier. | PaletteSave | Sauve une palette dans un fichier. | PDFExtract | Creates a new PDF document from individual pages extracted from an existing PDF file. | TableAddBeginning | Adds a row at the top of an Infinite Table control. The row is inserted before the first row of the Table control. The scroll position of the Table control doesn't change. | WinOptimize | Changes the mode used to create and draw windows. All windows opened after calling this function will use the new mode. |
This page is also available for…
|
|
|