v24.2 Release Notes
- 11 minutes to read
Tip
Visit our website to explore the latest features across the DevExpress product line: What’s New in the Latest Version.
#RAD Studio 12.2 Support
Starting from v24.1.6, DevExpress VCL libraries officially support Embarcadero’s newest IDE (Delphi 12.2 and C++Builder 12.2 – 32 and 64 bit).
#Modern 64-bit C++ Compiler Support
We now support modern C++ compiler-related features. For technical information in this regard, please refer to the following: second Behind the Build webinar and documentation on upgrading with key things to know.
The new toolchain targets Windows 64-bit Intel apps, and is based on Clang 15, with a new STL, a new C++ runtime, and uses the Windows Universal C Runtime (UCRT). It has a new linker, and uses the COFF and PDB object and debug file formats.
All binaries (the compiler, linker, etc.) are 64-bit EXEs, meaning they can handle large memory requirements – and you’d be surprised how often this is needed for C++. This even includes when compiling in the IDE, where we call out to the external process.
Source: https://blogs.embarcadero.com/the-new-clang-toolchain-in-cbuilder-12-1/
Note
We cannot push this capability to v24.
#Deprecation of XE7 and XE8 Support
For additional information about this change refer to the following: The DevExpress VCL installation no longer support XE7 and XE8 (RAD Studio Delphi andd C++Builder IDEs).
#Hybrid VCL Development Proof of Concept
As you may already know, hybrid apps (apps that appear as native apps for a given platform but rely on JavaScript (JS) or other technologies inside) are becoming more and more prevalent in the marketplace. Good examples are desktop versions of Microsoft Teams and Visual Studio Code (both rely on WebView – an embedded browser – component inside a native container app for Windows, macOS, and Linux).
Our GitHub demo application illustrates the benefits of hybrid VCL development – apps that rely on a WebView component (an embedded web browser) within a native container app for Microsoft Windows. VCL developers can configure this JS widget using Delphi code and integrate JS HTML Editor commands with our VCL Ribbon control. The editor can also switch between light and dark CSS DevExtreme themes in response to changes between corresponding DevExpress VCL Skins and Palettes.
Note
This example represents a proof-of-concept and should not be used in production. Production use also requires a license for DevExpress Java
#Performance Enhancements
v24.2 includes the following performance-related enhancements (most apply to VCL apps used on 4K or high-resolution displays).
#Faster Rendering for Vector-Based Skin Elements – Up to 40%
Primary optimizations involve use of color fill instead of rendering SVG images (applies to all vector-based skins). Enhancements include the following:
- Approximately 20% rendering improvements for single-color skin elements.
- Up to 40% improvement for WXI and WXI Compact skins (depending on controls used on form).
#Faster Rendering of Different-Sized Vector-Based Skin Elements – Up to 50%
v24.2 includes rendering improvements for different-sized vector skin elements (such as form borders, bar/ribbon backgrounds, etc.) As a result, DevExpress-powered user interfaces are now more responsive: zero or reduced flickering during initial paint operations, window resizing, or moving to a different display. The larger the area of an element, the bigger the improvement. This applies to about 10% of all skin elements. In our tests, rendering speed improved 10% to 50% (depending on controls and skin elements painted on a form).
#WXI Compact Optimizations
Improved rendering time by 5 – 12%.
#Dark Skins
The key optimization is to delay main form display and skin system color (white) fill.
#Faster Built-in and User Skin Loading
We fixed EXIF-related issues, which slowed down SVG element loading from skins for certain usage scenarios. We also added a cache when loading user skins from files. As a result, apps relying on custom skins execute much faster (you can experience the benefits of this change within DevExpress VCL demos). Skins and also be switched using the DevExpress VCL Skin Selector without delays at runtime.
#Test Results
The following table helps illustrate performance improvements available to you (note: measurements are performed ona 4K/high-resolution display for the first cached render operation):
Test Case | v24. |
v24. |
Enhancement |
---|---|---|---|
Initial SVG Image load operation for skins | 8 – 20 | 120 – 150 | x7 |
Loading a user skin from a file (as implemented in our demos) | 202 | 1233 | x6 |
Drawing Ribbon or a Ribbon Form caption (2000x86px) |
0. |
1. |
x16 |
Drawing Ribbon or a Ribbon background (2000x200px) |
0. |
3. |
x5 |
Drawing a button (130x40px) | 0. |
0. |
10% |
To fully appreciate rendering-related benefits available in this release, please review the following videos.
Note
Video speed was reduced for demonstration purposes (to better display flickering). Forms open much faster in real-world usage scenarios.
#24.2
#24.1
#Accessibility Enhancements
Accessibility has been one of our main priorities over recent release cycles. Accordingly, we created a new Microsoft UI Automation (UIA)-powered engine and base component API/infrastructure for ongoing accessibility-related enhancements.
In v24.2, our UIA-powered engine replaced deprecated MSAA support in Bars and Navigator Bar.
Accessibility-related initiatives spill over into our v25.1 release and will include our VCL Data Grid, Tree List, Scheduler, Pivot Grid, an other data editors/data-aware controls. This is a massive undertaking and requires significant/ongoing development resources.
#Layout Control
#Layout Splitter
- Close and Open methods were added for TdxLayoutSplitterItem (along with corresponding OnClosed and OnOpened events). As you’d expect, you can now control splitter state in code, without complex inheritance requirements. This change will also impact accessibility support because you’ll be able to implement extended keyboard support for this layout item.
- Out new IsClosed flag allows you to determine TdxLayoutSplitterItem state.
- Our new OnMoved event provides information about splitter-related operations. Event arguments (TdxLayoutSplitterItemMovedEventArgs) allow you to access layout items delimited by the splitter (that triggered the movement operation: FarItem, NearItem). You can also determine the boundaries of delimited layout items before (OldFarItemBounds and OldNearItemBounds) and after (NewFarItemBounds and NewNearItemBounds) splitter expand, collapse, and move operations. This will be helpful for advanced usage scenarios where the OnCanResize event is insufficient.
- New GetFarItem and GetNearItem methods for TdxLayoutSplitterItem are designed to provide access to both far/near adjacent layout items.
For example, you can use new splitter events to maintain a single layout item expanded within the parent group:
procedure TMyForm.SplitterItemClosed(Sender: TdxLayoutSplitterItem;
AArgs: TdxLayoutSplitterItemMovedEventArgs);
var
I: Integer;
begin
for I := 0 to dxLayoutGroup1.Count - 1 do
if((dxLayoutGroup1.Items[I].ClassType = TdxLayoutSplitterItem) and
(dxLayoutGroup1.Items[I] <> Sender)) then
if (dxLayoutGroup1.Items[I] as TdxLayoutSplitterItem).IsClosed then
(dxLayoutGroup1.Items[I] as TdxLayoutSplitterItem).Open;
end;
procedure TMyForm.SplitterItemOpened(Sender: TdxLayoutSplitterItem;
AArgs: TdxLayoutSplitterItemMovedEventArgs);
var
I: Integer;
begin
for I := 0 to dxLayoutGroup1.Count - 1 do
if ((dxLayoutGroup1.Items[I].ClassType = TdxLayoutSplitterItem) and
(dxLayoutGroup1.Items[I] <> Sender)) then
if not (dxLayoutGroup1.Items[I] as TdxLayoutSplitterItem).IsClosed then
(dxLayoutGroup1.Items[I] as TdxLayoutSplitterItem).Close;
end;
procedure TMyForm.FormCreate(Sender: TObject);
var
I: Integer;
begin
for I := 0 to dxLayoutGroup1.Count - 1 do
if(dxLayoutGroup1.Items[I].ClassType = TdxLayoutSplitterItem) then
begin
(dxLayoutGroup1.Items[I] as TdxLayoutSplitterItem).AllowCloseOnClick := True;
(dxLayoutGroup1.Items[I] as TdxLayoutSplitterItem).OnOpened := SplitterItemOpened;
(dxLayoutGroup1.Items[I] as TdxLayoutSplitterItem).OnClosed := SplitterItemClosed;
end;
end;
#BBCode
#Full Hyperlink Support in Layout Item Captions
As you know, our VCL Layout Control allows you to apply custom formatting to UI element caption text using BBCode-inspired tags. With v24.2, you can also use [URL][/URL]
tags to define clickable hyperlinks for layout item and group captions (like Formatted Label Editors).
#Universal Hyperlink Handling Mechanism
v24.2 includes a universal hyperlink interaction engine across all products. This new engine allows you to define hyperlinks in text formatted using BBCode-inspired tags. OnHyperlinkClick, OnHyperlinkMouseEnter, OnHyperlinkMouseLeave, and OnShowHyperlinkHint events are now available for both the Layout Control and formatted labels. These events allow you to control all aspects of user interaction with hyperlinks, for example, replace hyperlink hint text or prevent activation of certain hyperlinks:
uses
System.StrUtils; // This unit declares the ContainsText global function
// ...
procedure TMyForm.dxLayoutControl1Item1HyperlinkClick(Sender: TObject;
AArgs: TdxHyperlinkClickEventArgs);
begin
if ContainsText(AArgs.URI, 'mailto') then // If the clicked hyperlink contains the "mailto" URI scheme
AArgs.Handled := True; // Prevents hyperlink activation
end;
procedure TMyForm.FormCreate(Sender: TObject); // Associates all layout items with the declared handler
var
I: Integer;
begin
for I := 0 to dxLayoutControl1.AbsoluteItemCount - 1 do // Iterates through all layout items
dxLayoutControl1.AbsoluteItems[I].OnHyperlinkClick := dxLayoutControl1Item1HyperlinkClick;
end;
#Skin Editor
#Usability Enhancements
With v24.2, we made it easier to locate DevExpress VCL Skin elements. You can now use Ctrl+Click key combination to display a list of target UI elements (recommended). You can also use the Highlight Element menu command to highlight a skin element within the Skin Editor preview (replicates our WinForms implementation).
#Chart Control
#Configure Bar Text Position
With the introduction of our new Position property (TopInside, BottomInside, Center, Top) you now have full control over the position of TdxChartXYSeriesBarView value labels.
var
ADiagram: TdxChartXYDiagram;
AValueLabels: TdxChartXYSeriesStackedBarValueLabels;
I: Integer;
begin
ADiagram := dxChartControl1.Diagrams[0] as TdxChartXYDiagram;
ADiagram.BeginUpdate; // Initiates the following batch change
try
for I := 0 to ADiagram.SeriesCount - 1 do // Iterates through all series in the diagram
begin
AValueLabels := (ADiagram.Series[I].View as TdxChartXYSeriesStackedBarView).ValueLabels;
AValueLabels.Visible := True; // Displays value labels for the current series
AValueLabels.Position := TdxChartStackedBarValueLabelPosition.TopInside;
AValueLabels.Appearance.FillOptions.Mode := TdxFillOptionsMode.Hatch;
AValueLabels.Appearance.FillOptions.Color := TdxAlphaColors.AliceBlue;
AValueLabels.Appearance.FillOptions.Color2 := TdxAlphaColors.LightBlue;
AValueLabels.Appearance.FillOptions.HatchStyle := TdxFillOptionsHatchStyle.DarkDownwardDiagonal;
AValueLabels.Appearance.FontOptions.Name := 'Arial';
AValueLabels.Appearance.FontOptions.Size := 10;
AValueLabels.Appearance.FontOptions.Bold := True;
AValueLabels.TextFormat := '{V:0.000} M'; // Defines a custom label formatting pattern
end;
finally
ADiagram.EndUpdate; // Calls EndUpdate regardless of the batch operation's success
end;
end;
#Cloud-Related API
We updated DevExpress Cloud-related APIs for the following VCL libraries:
- VCL Scheduler: Updated Microsoft 365 and Google calendar support
- Cloud Storage-related component updates
- VCL Map Control: Out Map control now supports Microsoft’s Azure Map Services (Bing Maps replacement).
Please refer to the following post for additional Map-related information: Important Announcement: Bing Maps for Enterprise – Service Deprecation.
#Skins
#Application-Wide Skins and Associated Global Settings
v24.2 ships with the following DevExpress Project Settings dialog:
The DevExpress Project Settings dialog displays Vector Skins at the top of the Available Skins list view (Raster Skins are displayed in a separate category and disabled by default).
You can use the Project Settings dialog to specify a DevExpress Skins and default palette name (WXI Compact is enabled by default) for your project.
This new dialog and the Object Inspector allow you to add a single dxSettings
file and maintain app settings in one location (no need to duplicate skin registrations in your units under uses).
#DevExpress Skins Are No Longer Applied to Non-DevExpress Forms
Previously, if you did not wish to apply DevExpress VCL Skins to all controls/forms simultaneously, you could handle OnSkinControl and OnSkinForm events for TdxSkinController.
With v24.2, you no longer need to write code for third-party forms/components when using standard VCL controls from the following list: Third Party Forms/Components. The DevExpress VCL Skin engine uses a predefined ignored list for application forms found in popular third-party UI components.