Support

Breaking Changes in DevExpress VCL 12.1.3

This page lists those changes in DevExpress VCL 12.1.3 that may break your code written for previous versions of our VCL components.

Installation for VCL

Starting from VCL 12.1, the installer includes only shared packages and no longer provides personality-specific packages for IDEs. The installer removes the personality-specific installations for IDEs during the update. You need to select the appropriate RAD Studio versions at the selection step in Setup and install the shared packages instead.

VCL Subscription

Since the installer now includes only shared packages, the out method and event parameters that reference object types have been replaced with the var parameters to ensure proper header file generation in C++Builder. As a result, saving changes in existing Delphi projects may result in errors regarding incorrect method or event handler parameters. When prompted by the IDE, do not remove incorrect instances but manually replace "out" with "var" in method/event handler definitions and implementations, and then save the changes.

ExpressLayout Control

  • The IdxLayoutDragAndDropHelper, IdxLayoutItemsHelper, IdxLayoutFontHelper, and IdxLayoutControl helper interfaces have been removed to improve performance. As a result, the TcxGridLayoutView, TdxCustomLayoutControl, and TdxLayoutContainer class declarations and implementations have been updated accordingly.
  • Previously, an AV occurred if the client height or width could not be obtained via the layout control's OccupiedClientHeight or OccupiedClientWidth property. Now these properties return –1 to let you properly handle the error.

ExpressNavBar Suite

Starting from this Build, the ExpressSideBar source files are not shipped with the installer. To convert ExpressSideBar controls to ExpressNavBar controls in your legacy projects, do one of the following:

  • Use a design-time converter available for ExpressSideBar controls in Builds v2011 vol x.x and then upgrade to Build v2012 vol 1. For more information on these conversions, refer to the "Build v2011 vol 1.3" entry in the "Known Issues and Important Changes List" help topic.
  • Manually convert ExpressSideBar controls to ExpressNavBar controls or any other suitable navigation controls.

ExpressPageControl

The TcxPCCloseButtonMode type has been renamed TcxPCButtonMode.

Common Libraries

ExpressEditors Library

  • We have optimized the code of the TcxTreeView, TcxShellTreeView, TcxListView, and TcxShellListView controls and changed their class inheritance to use common classes. As a result, the TcxCustomShellEditContainer class has been removed, and the following classes have changed their ancestor classes.

    ClassNew Ancestor
    TcxCustomTreeViewTcxTreeViewContainer
    TcxCustomShellTreeView
    TcxCustomListViewTcxListViewContainer
    TcxCustomShellListView
    TcxCustomInnerListViewTcxBaseInnerListView
    TcxCustomInnerShellListView
    TcxCustomInnerShellTreeViewTcxBaseInnerTreeView
    TcxShellIconOptionsTcxIconOptions
  • Opening forms created with TcxDBNavigator controls v2011 vol 1.4 through 1.7 in the IDE displays the "Error reading <cxDBNavigator>.BorderStyle Invalid property value" error. To successfully continue opening these forms, click Ignore or Ignore All. Starting from v2011 vol 1.8 and vol 2.1, the BorderStyle property is not stored in a .DFM file.

ExpressLibrary

  • The CanShowHint global function has been renamed dxCanShowHint in the cxContainer unit. The following helper interfaces, classes, and functions related to hints have been moved from the cxControls unit to the dxCustomHint unit: IcxHintWindowHelper, IcxHintableObject, TcxHintAnimationStyle, TcxBaseHintWindow, TcxControlHintHelper, cxActivateHint, cxActivateHintData, and cxProcessControlHintInfo.
  • We made a number of changes to date processing classes, types, functions, and constants.
    • The cxDateUtils unit:
      • The TDayOfWeek and TcxDayOfWeek types have been renamed TdxDayOfWeek.
      • The GetStartDateOfWeek function has been removed. Use the dxGetStartDateOfWeek function instead.

      The following table lists renamed functions in this unit and their new names.

      FunctionNew Name
      DayOfWeekOffsetdxDayOfWeekOffset
      GetStartDateOfYeardxGetStartDateOfYear
      GetEndDateOfYeardxGetEndDateOfYear
      GetMonthNumberdxGetMonthNumber
      GetStartDateOfMonthdxGetStartDateOfMonth
      GetEndDateOfMonthdxGetEndDateOfMonth
      GetWeekNumberdxGetWeekNumber
      GetDateElementdxGetDateElement
      Alternatively, you can use dxCalendarUtils.dxGetCalendarDateElement

      The following functions and constants have been moved from the cxDateUtils unit to the dxCalendarUtils unit:

      • function cxGetCalendarInfo(Locale: LCID; Calendar: CALID; CalendType: CALTYPE; lpCalData: PChar; cchData: Integer; lpValue: PDWORD): Integer;
      • function cxDateToLocalFormatStr(ADate: TDateTime): string;
      • function cxDateToStr(ADate: TDateTime): string; overload;
      • function cxDateToStr(ADate: TDateTime; AFormat: TFormatSettings): string; overload;
      • function cxDayNumberToLocalFormatStr(ADate: TDateTime): string; overload;
      • function cxDayNumberToLocalFormatStr(ADay: Integer; ACalendar: TcxCustomCalendarTable = nil): string; overload;
      • function cxGetCalendar(ACalendType: CALTYPE): TcxCustomCalendarTable;
      • function cxGetCalendarClass(ACalendType: CALTYPE): TcxCustomCalendarTableClass;
      • function cxGetLocalCalendarID: TcxCALID;
      • function cxGetLocalCalendar: TcxCustomCalendarTable;
      • function cxGetLocalDateSeparator: Char;
      • function cxGetLocalFormatSettings: TFormatSettings;
      • function cxGetLocalLongDateFormat: string;
      • function cxGetLocalLongTimeFormat: string;
      • function cxGetLocalMonthName(ADate: TDateTime; ACalendar: TcxCustomCalendarTable): string; overload;
      • function cxGetLocalMonthName(AYear, AMonth: Integer; ACalendar: TcxCustomCalendarTable): string; overload;
      • function cxGetLocalMonthYear(ADate: TDateTime; ACalendar: TcxCustomCalendarTable = nil): string;
      • function cxGetLocalShortDateFormat: string;
      • function cxGetLocalTimeAMString: string;
      • function cxGetLocalTimePMString: string;
      • function cxGetLocalTimeSeparator: Char;
      • function cxGetLocalYear(ADate: TDateTime; ACalendar: TcxCustomCalendarTable = nil): string;
      • function cxGetDayOfWeekName(ADay: TDay; AFontCharset: TFontCharset): string;
      • function cxIsGregorianCalendar(ACalendar: TcxCustomCalendarTable = nil): Boolean;
      • function cxLocalFormatStrToDate(const ADateStr: string): TDateTime;
      • function cxStrToDate(const ADateStr: string; ACalendar: TcxCustomCalendarTable = nil): TcxDateTime; overload;
      • function cxStrToDate(const ADateStr: string; AFormat: TFormatSettings; ACalendar: TcxCustomCalendarTable = nil): TcxDateTime; overload;
      • function cxStrToDate(const ADateString: string; const AFormat: TFormatSettings; ACALTYPE: CALTYPE): TDate; overload;
      • function cxTimeToStr(ATime: TDateTime): string; overload;
      • function cxTimeToStr(ATime: TDateTime; ATimeFormat: string): string; overload;
      • function cxTimeToStr(ATime: TDateTime; AFormatSettings: TFormatSettings): string; overload;
      • procedure AddDateRegExprMaskSmartInput(var AMask: string; ACanEnterTime: Boolean);
      • function cxGetDateFormat(ADate: TDateTime; out AFormatDate: string; AFlags: Integer; AFormat: string = ''): Boolean;
      • function DateToLongDateStr(ADate: TDateTime): string;
      • function cxDateTimeToText(ADate: TDateTime; AFourDigitYearNeeded: Boolean = False; AUseDelphiDateTimeFormats: Boolean = False): string;
      • function cxTextToDateTime(const AText: string; AUseDelphiDateTimeFormats: Boolean = False): TDateTime;
      • function DateTimeToText(ADate: TDateTime; AFourDigitYearNeeded: Boolean = False): string;
      • function DateTimeToTextEx(const ADate: TDateTime; AIsMasked: Boolean; AIsDateTimeEdit: Boolean = False; AFourDigitYearNeeded: Boolean = False): string;
      • function TextToDateEx(AText: string; var ADate: TDateTime; const AFormatString: string = ''): Boolean;
      • function StrToDateDef(const ADateStr: string; ADefDate: TDateTime): TDateTime;
      • function SmartTextToDate(const AText: string; var ADate: TDateTime): Boolean;
      • const SmartTextToDateFunc: function(const AText: string; var ADate: TDateTime): Boolean = nil;
      • function cxStrToDateTime(S: string; AUseOleDateFormat: Boolean; out ADate: TDateTime): Boolean;

    • The cxFormats unit:
      • The TcxFormatController.StartOfWeek property now returns a TDay value. A TcxFormatController object is returned by the cxFormatController global function.

    • The dxCore unit:
      • The TdxFormatSettings class has been moved to the cxFormats unit.
      • The dxGetStartOfWeek: WORD function has been replaced with the cxDateUtils.dxGetStartOfWeek: TDay function.

    • The cxClasses unit:
      • The dxEndOfLine constant has been deleted. Use the dxCore.dxCRLF constant instead.
More from DevExpress
Live Chat
Have a pre-sales question?
Need assistance with your evaluation?
We are here to help.
Chat is one of the many ways you can contact members of the DevExpress Team. We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.
If you need additional product information, require pre-sales assistance, or want help with your order, write to us at info@devexpress.com or call us at
+1 (818) 844-3383.