Skip to main content
All docs
V25.1
  • v25.1 Release Notes

    • 8 minutes to read

    Tip

    Visit our website to explore new features across the entire DevExpress product line: What’s New in the Latest Version.

    A Preview of the Report Designer and Report Viewer (Powered by JS/DevExtreme Wrappers for Delphi/C++Builder)

    The DevExpress VCL component suite is taking a big step toward modernization with our new AI-powered Reporting Platform (ExpressReports) – a bridge that leverages the DevExpress JavaScript Report Designer and Viewer for use in native VCL apps (using modern web-based design capabilities through WebView and ASP.NET Core). All required .NET and JS dependencies are embedded into a single self-contained EXE file transparently. As such, you can use Delphi/C++Builder for many report customizations.

    ExpressReports is available as a Community Technology Preview (CTP). Please review our pre-release software notes if you plan on using ExpressReports.

    Tip

    ExpressReports requires the purchase of our new VCL Subscription+ OR an existing active VCL Subscription with any .NET subscription that includes DevExpress Reports for ASP.NET Core/JavaScript (relevant subscription SKUs include: Reporting, ASP.NET and Blazor (includes DevExtreme), DXperience, or Universal). A 30-day trial is also available for ExpressReports.

    VCL AI-Powered Reports - A Template Designer Example

    VCL AI-Powered Reports - A Report Preview Example

    Accessibility, UI Automation, and Keyboard Navigation Enhancements

    VCL v25.1 includes enhancements for the following DevExpress VCL UI components:

    • VCL Form Layout Manager (including layout groups, tabs).
    • VCL Data Grid (key navigation, read-only, and partial data editing scenarios without complex interactions).
    • Other popular VCL Data Editors (key usage scenarios for both in-place and standalone editors).

    Full VCL accessibility support is a significant undertaking and requires substantial development resources. We expect to improve accessibility support for the DevExpress VCL TreeList, Scheduler, Pivot Grid (and other controls) by the end of 2025. Refer to the following help topic for additional information in this regard: Accessibility Support.

    Artificial Intelligence (AI)

    Our VCL Rich Text Editor and Memo components now include Summary, Translation, and other “smart” functions (much like our .NET libraries).

    VCL Rich Edit: Support for AI Integration

    For example, the DevExpress VCL Rich Text Editor demo (%Public%\DevExpress VCL Demos\MegaDemos\Product Demos\ExpressRichEditControl\dxAI.ChatClient.Azure.pas) uses our Azure OpenAI Service deployment through a simple TdxAIAzureChatClient implementation (it extends our base TdxAIChatClient API).

    interface
    
    uses
      // ...
      dxAI, dxAI.Commands.Consts, dxAI.Commands.Text, dxAI.ChatClient.Azure;
    
    implementation
    
    const
      SolveCommandID = 'SOLVE.MATH';
    
    procedure TMyForm.dxRichEditControl1GetAICommands(Sender: TObject;
      const AAICommands: TdxAICommandList);
    begin
      AAICommands.Remove(TdxAICommandIDs.Proofread);
      AAICommands.Add(SolveCommandID);
    end;
    
    procedure InitializeAIAssistant;
    var
      Client: TdxAIChatClient;
    begin
      Client := TdxAIAzureChatClient.Create('DEMO', 'https://public-api.devexpress.com/demo-openai',
        'gpt-40-mini', '2024-02-01');
      TdxAIChatClients.AddChatClient(Client);
      TdxAICommands.AddCommand(TdxAITextCommand.Create(SolveCommandID, 'Solve',
        'Please solve these instructions. Return an answer without formatting', 'Math'));
    end;
    
    initialization
      InitializeAIAssistant;
    

    Note

    Until Embarcadero ships official AI-related SDK libraries, VCL developers can plug in third-party libraries or leverage their own implementation to support different AI providers. We also published a GitHub example with a custom TdxAIChatClient implementation for popular open-source AI libraries.

    Our VCL Report Designer and Viewer components (shipped as part of the new ExpressReports Suite) also inherit the AI-powered functions from the DevExpress Reports for ASP.NET Core/JS (learn more).

    Design-Time Enhancements

    RAD Studio 12.3 Support

    VCL v24.2.5+ and v25.1 officially support the most recent versions of RAD Studio (Delphi 12.3 and C++Builder 12.3 for both 32-bit and 64-bit).

    64-bit IDE Support

    In addition, DevExpress VCL libraries include 64-bit design-time packages to support 64-bit design-time functionality introduced in RAD Studio 12.3.

    Online Help Integration

    You can press F1 in the IDE to open corresponding online help topics in a browser (https://docs.devexpress.com/VCL/). Our VCL installers no longer include offline documentation, but it is still available as a separate download.

    Dark Mode Support

    We improved developer-specific user experiences and modified DevExpress dialogs and wizards to apply the dark theme selected in the IDE.

    Dark RAD Studio Theme
    RAD Studio: Dark Theme
    Light RAD Studio Theme
    RAD Studio: Light Theme

    Simplified Application-Wide Skin

    VCL v25.1 now propagates global TdxSkinController skin settings to the Layout Control, Navigation Bar, and Bar Manager components (if UseGlobalSkin is enabled in code or in the Project Settings dialog). For the majority of developers, these changes will produce fewer errors and simplify configuration across multiple usage scenarios (see examples: one, two, three).

    This should not affect customers who prefer advanced/ad-hoc skin customizations or where a global skin is not required (users can also revert to the previous behavior using feature toggles).

    Layout Control

    Layout Control users no longer need to deal with TdxLayoutCxLookAndFeel or TdxLayoutSkinLookAndFeel if UseGlobalSkin = True is set in code or in the Project Settings dialog. Much like our TdxRibbon control, the TdxLayoutControl now automatically updates skin settings from the TdxSkinController component used in the application (including components added inside the layout control).

      dxSkinController1.SkinName := 'WXI';  // You can use only global skins in v25.1+
      dxLayoutSkinLookAndFeel1.LookAndFeel.SkinName := dxSkinController1.SkinName; // Not needed in v25.1+
      dxLayoutControl1.LayoutLookAndFeel := dxLayoutSkinLookAndFeel1; // Not needed in v25.1+
    

    To apply an individual skin, you can still modify the TdxLayoutControl.LayoutLookAndFeel.LookAndFeel.SkinName property – local skin settings always override global application settings.

    You can revert to previous behavior globally via UseGlobalSkin = False (in project settings) or TdxLayoutControl.DefaultUseGlobalSkin = bFalse (in the module initialization section, when you have multiple places to customize) or locally via dxLayoutControl1.UseGlobalSkin = bFalse (in your form code).

    We improved the design-time experience for the Navigation Bar control’s Appearance Designer in the following manner:

    • Sorted different views so that skinnable views appear at the top.
    • Filtered the Color Scheme dropdown based on available/global project skins.
    • Updated icons and added Dark Mode support in the designer.
    • Set the default view to Accordion (instead of the Base view for newly added controls).

    VCL Navigation Bar: Appearance Designer

    Bar Manager

    Again, if UseGlobalSkin = True is set in code or in the Project Settings dialog, and users have not changed the TdxBarManager.Style property (it is not set in DFM and is bmsEnhanced), our Bar Manager automatically updates its skin settings from the TdxSkinController component used in the application.

    The default Style value depends on the NativeStyle installer setting (“Use native look and feel style as default for DevExpress components”): if True, the default value is bmsUseLookAndFeel, otherwise the default value is bmsEnhanced.

    You can revert to previous behavior by setting UseGlobalSkin = False (in project settings) or the global TdxBarManager.DefaultUseGlobalSkin = bFalse (in the module initialization section, when you have multiple places to customize).

    Status Bar

    The same changes made to TdxBarManager also apply to TdxStatusBar. Similarly, you can revert to previous behavior by setting UseGlobalSkin = False and TdxStatusBar.DefaultUseGlobalSkin = bFalse. The only differences are:

    • The name of the property and its default value – TdxStatusBar.PaintStyle and stpsStandard, respectively.
    • Our Status Bar does not depend on installer settings.

    When our status bar is skinned, default height/rendering is slightly different from native style (TdxSkinController.NativeStyle is True) – we consider this more of a “bug fix” than a breaking change, because the overall appearance is now more accurate in v25.1.

    v24.2 (PaintStyle = stpsStandard by default)
    VCL Status Bar: Standard
    v25.1 (PaintStyle = stpsUseLookAndFeel by default)
    VCL Status Bar: Skin-Based

    A Simpler Way to Save/Restore the Grid and TreeList State

    In our v25.1 release cycle, we simplified the following save/restore layout-related capabilities (custom cxStatusKeeper implementation/package from our obsolete KB articles KA18654 and A2279):

    • Save and restore expanded, selected, focused, and top visible nodes/records into a file/stream.
    • Added support for our Data Grid’s table and banded views along with the TreeList.
    • Included plug-and-play runtime experiences with existing StoreToXXX (IniFile/Registry/Storage/Stream) control methods. You can now pass required layout parameters into these storage methods (like gsoFocusedRecord or gsoSelected.

    These operations/capabilities now require much less code to copy/maintain across different versions of RAD Studio.

    procedure TMyForm.FormCreate(Sender: TObject);
    var
      AFileStream: TFileStream;
    begin
      if FileExists('GridConfig.dat') then
      begin
        AFileStream := TFileStream.Create('GridConfig.dat', fmOpenReadWrite);
        try
          // Restore the grid view layout structure along with selected records and the current focus position
          cxGrid1DBTableView1.RestoreFromStream(AFileStream, True, False,
           [gsoUseFilter, gsoUseSummary] + cxGridStoreAllDataViewStates)
        finally
          AFileStream.Free;
        end;
      end;
    end;
    
    procedure TMyForm.FormDestroy(Sender: TObject);
    var
      AFileStream: TFileStream;
    begin
      AFileStream := TFileStream.Create('GridConfig.dat', fmCreate or fmOpenReadWrite);
      try
       // Save the grid view layout structure along with selected records and the current focus position
       cxGrid1DBTableView1.StoreToStream(AFileStream,
         [gsoUseFilter, gsoUseSummary] + cxGridStoreAllDataViewStates)
      finally
        AFileStream.Free;
      end;
    end;
    

    Additionally, new StoreDataViewState/RestoreDataViewState methods allow you to separate default layout settings (like column width, order, etc.) from data layout/structure (focused rows, groups, etc.).

      cxGrid1DBTableView1.StoreDataViewState(cxGridStoreAllDataViewStates);
      FDQuery1.Refresh;
      cxGrid1DBTableView1.RestoreDataViewState(cxGridStoreAllDataViewStates);