What's New in Delphi and C++Builder 2010

From RAD Studio XE3
Jump to: navigation, search

Go Up to What Was New in Past Releases

Note: This document describes a past release.

This release provides key new features for developing applications using both Delphi and C++Builder.

For more information about migrating your projects, see the RAD Studio 2010 Migration Center.

For information about the InstantOn versions, see the Delphi and C++Builder InstantOn FAQ.

IDE Changes

Many changes have been made in the IDE with the intention to dramatically improve product usability.

Also see the IDE-related blogs and previews:

Code Editor Changes

  • Enable/Disable Code Folding: A new Code Folding checkbox on the Tools > Options > Editor Options dialog box allows you to enable/disable Code Folding in the Code Editor so that your Code Folding preference persists from session to session. See also Using Code Folding and Code Editor.
  • The Tab key is now supported in the Code Editor for indenting either the current line of code or a selected block of code.
  • Drag-and-Drop Files: You can now drag-and-drop a file from the Code Editor to the Project Manager, and the file is added to your project in the location you indicate. See Adding and Removing Files.
  • In Delphi, refactoring can be used with generics: Editing Delphi code, you can apply the Rename, Change Parameters, and Extract Method refactoring operations to identifiers and methods used with generics. Notice that refactoring is not an internal Modeling feature anymore; to run refactoring operations from the Code Editor, you do not need to activate Modeling Support for your project.
  • Source Code Formatter: Editing Delphi or C++ code in the Code Editor, you can apply the Edit > Format Source command to format the source code. You can set formatting options for indentation, spaces, line breaks, and capitalization in the Formatter Options page of the Options dialog box (Tools > Options > Formatter).
  • Source Code Audits and Metrics can now be activated with the Project > QA Audits and Project > QA Metrics commands when you edit your source code file in the Code Editor. Source Code Audits and Metrics are not internal Modeling features anymore; to run audits and metrics from the Code Editor, you do not need to activate Modeling Support for your project. The video Audits DCC in Delphi 2010, by Mike Rozlog shows how to use audits to find duplicate code on conditionals.
  • Code Completion Changes:
    • In C++, Code Completion works for the C++ Scope Operator (::). If you type a class name and then two colons (::), the Code Completion window opens immediately (you do not have to invoke Code Completion by pressing Ctrl+Space).
    • In Delphi, Code Completion works for the Delphi reserved words if you enable their display on the Code Insight dialog box (Tools > Options > Editor Options > Code Insight).
    • For both Delphi and C++, you can press the Esc key to cancel a Code Completion request or dismiss the Code Completion window after it is displayed. This feature is new only for C++.
See Code Completion.
  • Drag-and-drop icons: You can now move certain glyphs in the gutter of the Code Editor window. For example:
    • Breakpoint icons: A moved breakpoint retains the settings of the original breakpoint. For more information about breakpoints, see Setting and Modifying Breakpoints.
    • Bookmark icons: The moved bookmark has the same number as the original bookmark. For information about bookmarks, see Bookmarks.
    • The instruction pointer symbol ExecutionPoint.bmp: This icon indicates the next line to be executed (while debugging).

Project Manager Changes

  • Sorting the Contents of the Project Manager: The new Sort By toolbar button enables you to sort the items in the Project Manager by name, timestamp, path name, or file type. You can also specify Auto Sort, which means that future additions to the project or project group are to be added in the current specified sort order. See Project Manager.
    • To set global sorting for the current project group, click the SortBy.jpg toolbar button and select (Sort By).
    • To set the default sort order to be used for all newly created or imported projects, click the SortBy.jpg toolbar button and select (Default sort order).
    • To set local project-level sorting, use the Sort By command on the project context menu.
  • Compile All From Here and Build All From Here: The project context menu on the Project Manager contains a new From Here command that enables you to perform the following:
    • Compile All From Here
    • Build All From Here
    • Clean All From Here
These three commands start a compile, a build, or a clean operation, respectively, beginning at the selected node in the project. These commands are described in Project Context Menu.
  • Compile All, Build All, and Clean All: These new context menu commands are available for Project Groups that contain more than one project. See Project Group Context Menu.
  • The Project context menu on the Project Manager contains a new Install|Uninstall command that enables you to either install or uninstall a design-time package.

Tool Palette Changes

  • The new, optional Component Toolbar contains all the categories and components that are available on the regular Tool Palette (Standard, Data Access, and so forth).
To enable the Component Toolbar, use View > Toolbars > Component command. When the Component Toolbar is enabled, you can use either the Component Toolbar or the Tool Palette to add components to your application. Clicking a tab on the component toolbar displays icons representing the components in that category. Then you click a component's icon to add the component to your form.
See Enabling the Component Toolbar. See also the blogs "Old School" Tool Palette, by Nick Hodges and How to configure Delphi 2010 to look, work, and feel like Delphi 7, by Andreano Lanusse.
  • Tool Palette Hints: When you hover the mouse pointer over a component on the palette, a hint displays that includes basic information such as component name, unit name, and design-time package name.

Search Command Changes

Various Search commands have been enhanced and extended as follows:

  • The Search > Find command (Ctrl+F) has been redesigned and now appears as a task bar located at the lower edge of the Code Editor window, rather than as a dialog box (see also Find): FindTaskBar.bmp
  • The IDE now highlights all Search matches. The first match location is highlighted in one color, and all the other onscreen locations of the search item are highlighted in a second color.
    • The two colors that are used are predefined for the IDE's color schemes.
    • You can customize the colors by selecting background and foreground colors for the Additional search match highlight element on Tools > Options > Editor Options.
    • To disable the highlighting of all search matches, uncheck Show all search matches on Tools > Options > Editor Options.
  • Incremental Search also has a new search bar: IncrementalSearch2.jpg. You can just start typing or select from previous search strings. As you type, the first matching result is highlighted in the editor, and all other matching instances are highlighted in a second color.
  • The Search > Find in Files dialog box has a new Directories field that accepts wildcard specifications such as *.pas or *.cpp. You can also specify multiple directories - either by separating directory names with semicolons in the Directories field or by clicking the new Folders and Groups button to open the Select Directories dialog box. On Select Directories, you can construct directory lists and directory groups. For more information, see:
  • IDE Insight: Have you ever wanted to use a particular command, but you could not recall the menu that contains the command? IDE Insight is your answer! The new IDE Insight search box enables you to type in a string and then select from a list of all the matching items in the IDE and in your current project environment. The IDE Insight box contains a list of categories such as Commands, Files, Components, Project Options, and so forth.
As you type your search string, IDE Insight performs an incremental search: the IDE Insight box displays only the categories that contain matching items, along with the one "best" match from each category. You can press Alt+A or a button on the IDE Insight dialog box to toggle between showing all categories (with one "best" match per category) or all matches (which might require you to scroll through the list to find the match you seek).
When you double-click an item in the IDE Insight box, the IDE automatically invokes or performs the associated action. For example, if you type "open", the list displays all the currently available items that contain the string "open". If you double-click the name of a dialog box, the dialog box is invoked. If you double-click a component (such as TOpenDialog), the component is automatically added to the active form.
To invoke the IDE Insight search box, go to Search > IDE Insight or press F6 (press Alt+F1 in Classic or Brief keybindings). See Finding Items in the IDE Using IDE Insight and Controlling the Search in IDE Insight.
Also see: IDE Insight, by Nick Hodges

New Items Dialog Box Changes

The New Items dialog box, also known as the Gallery (File > New > Other), has the following new features:

  • Use the new filtered search box (GalllerySearch.jpg) to specify a substring to match with names of items in the Gallery.
    • This new filtered search box has an implicit * (matching 0 characters through any number of characters) at both the beginning and end of the string you type. You can also use the ? and * wildcards.
    • When you enter a search string, only the pages that contain matching items are displayed, and on those pages, only the matching items are displayed.
    • For example, to display every component that contains the word "module" or "Module", you could enter just the substring "mod".
  • The New Items dialog box now displays both the available items and the unavailable items. Previously, the Gallery displayed only the components that were currently available for use (that is, supported in the curent context). Now components that are currently unavailable are displayed but are grayed out to indicate that they are not available.
  • You can add an empty file to your project and specify its file extension. The File > New > Other > Other Files page contains a new Text File entry that invokes a "New file" dialog box. You can select from a list of file types or enter a file type. See Adding and Removing Files.
To display the New Items dialog box, click File > New > Other.

Miscellaneous IDE Changes

  • Tools Options Dialog Box Resizeable: You can now resize the Tools > Options dialog box by clicking and dragging any side or corner of the box.
  • The File > Reopen command enables you to select from a dropdown menu of recently open projects and files. The new File > Reopen > Properties dialog box enables you to specify the maximum numbers of projects and files that appear on the Reopen list. See Reopen and Reopen Menu Properties. Also see File Reopen, by Nick Hodges.
  • New Live Templates: New templates for raising exceptions (Delphi) and for throwing exceptions (C++) have been added to the library of Live Templates available in the Templates Window.
  • View > Messages: This new command enables you to explicitly open the Messages window.

Also see the blogs and previews at:

Delphi Compiler Changes

The following changes have been made in the Delphi compiler:

C++Builder 2010 Changes

The following key features are new or significantly changed in C++Builder 2010:

  • C++ Class Explorer: This powerful class browser enables you to extract more information about the types in your projects. The three panes in the C++ Class Explorer provide detailed information as well as go-to-declaration and go-to-definition functionality for classes, interfaces, fields, methods, and properties.
    • The Graph tab on the Source\References\Graph window displays a graphical representation of the inheritance hierarchy of the items selected in the Type List.
    • On the Type List, the Group by commands enable you to view your project arranged in different views:
      • Class hierarchy of your project
      • File view
      • Namespace view
      • Custom display groupings
Creating fields, methods, and properties is automated by context menu commands. See C++ Class Explorer Topics.
  • Boost Libraries: Version 1.39 of these versatile libraries are available with C++Builder 2010.
  • The Secure C Library has been added to the C Runtime Library. The secure C functions, such as fscanf_s, fwscanf_s, provide bounds checking of character arrays, and prevent buffer overflows, as data is never written past the end of an array.
  • The C++ compiler (BCC32.exe) supports several new command-line options:
    • --savemem specifies the maximum SAVEMEM size in MB.
    • -Vbu allows old-style template 'using.' In C++Builder 2009 and before, 'using' inside a template did not work when overloads were present. The -Vbu option retains this behavior.
  • Support for the [[deprecated]] attribute has been added to the compiler, allowing users to flag their constructs as deprecated and the compiler to issue warnings (W8111 Accessing deprecated entity %s (C++)). See C++0x Attributes.
  • Support for #pragma once has been added to the compiler, allowing users another way to handle the multiple inclusion problem.
  • A new unit was added to manage alias records (#pragma alias), so that now there are two, one for Unicode and one for non-Unicode aliases.
  • Language Support for the VCL (C++) has been reviewed and restored to the online help from C++Builder 6 help. This section contains important information about differences between standard C++ and C++Builder that originate from the requirements in working with Object Pascal in RAD Studio.
    • Note now _tchar maps to wchar_t instead of char. Use either _tmain(), or _tWinMain() as the entry point for new applications in the C++ Builder.

Modeling Changes

For a quick overview of modeling, see the video UML Visualize With RAD Studio 2010, by Mike Rozlog.

The following changes have been made in the UML Modeling components:

  • Gradient coloring. The Diagram View supports gradient coloring of background and nodes. Several levels of gradient coloring can be implemented:
    • Background - You can use gradient coloring of the whole background in the Diagram View. Two colors for background gradient coloring can be specified.
    • Nodes - You can use gradient coloring of nodes in the Diagram View. Two colors for gradient coloring of nodes can be specified.
    • Nodes according their metaclasses - You can specify that colors for gradient coloring of different types of nodes are applied from some predefined color schema. Different couples of gradient colors are defined to several groups (metaclasses) of nodes (interfaces, enumerations, classes, association classes, etc.).
    • Particular nodes - In the Object Inspector you can set particular couples of colors for gradient coloring of any node.
  • Creating members. In the Diagram View you can create new members by the following convenient ways:
    • Using '+' to add members in compartments - In nodes, you can use the '+' tool button at the end of compartment name area to add corresponding member for classifiers. Simply click the '+' tool button in some compartment name area and a new member appears. The member name is in editable state.
    • Using 'Insert' to activate 'Add' context menu - Click some node and press the Insert key. The Add context sub-menu opens. This is the usual Add sub-menu from the standard context menu activated by right-click in this node.
  • Creating links. In the Diagram View you can create links between nodes using the following convenient ways:
    • Create output links using the DV OutputLinkIcon.png pop-up tool icon, which appears near that side of a node close to which the mouse cursor hovers.
    • Create input links using the DV InputLinkIcon.png pop-up tool icons, which appears near that side of a node close to which the mouse cursor hovers.
    • Create link and destination node. When creating a link you click on a diagram background, then the context menu, showing types of nodes that can be created, appears.
  • Node presentation. The Diagram View provides the improved presentation of nodes:
    • Round off rectangle corners. This option is used to round off corners of rectangular nodes.
    • Collapse/expand all compartments. You can collapse/expand all compartments of the selected node using the Layout > Collapse All and Layout > Expand All context menu commands.
    • Nodes without compartments. You can use the Layout > Brief view context menu command to show selected nodes hiding all their compartments.
  • [C++] Rename files of class at class renaming. This option is used for C++ modeling projects. It sets that when you rename a class in the Diagram or Model views, then the source file containing the class code is renamed correspondingly. Notice that if this option is False, then the file renaming happens only once. When you create a class the file containing this class is created as well. If you change this class name during the first activation of the in-place editor, then the filename is changed correspondingly. However, following renaming of the class will not change the corresponding file name.

Debugger Changes

The following key features are new or significantly changed for the debugger:

  • Two types of custom data visualizers can now be created and plugged in by using the Tools API. The product includes several built-in debugger visualizers:
    • TDateTime (Delphi and C++)
    • std::string and std::wstring (C++ only)
    • TStringList (Delphi and C++)
You can select specific visualizers on the Tools > Options > Debugger Options > Visualizers dialog box and on the various debug windows that support visualizers. See Debugger Visualizers and Enabling/Disabling Debugger Visualizers. The video Debug Visualizer in RAD Studio 2010 shows more about the visualizers.
  • The Event Log has been renovated in the following ways:
    • The Event Log is now implemented as a TVirtualStringTree rather than as a TStringGrid. This change makes logging faster.
    • You can stop the scrolling of events by clicking inside the Event Log window and selecting an event (the Scroll new events into view option must be selected on the Tools > Options > Debugger Options > Event Log page) (see Event Log Options).
    • Multiline events in the Event Log now appear on discrete lines, as follows:
      • Event type appears on first line
      • Event text appears on following lines
      • Process information appears on the final lines
    • Lengthy event messages can be viewed in a hint window by hovering the mouse over the event in the Event Log.
  • The Allow side effects in new watches option has been moved from the Embarcadero Debuggers page to the Tools > Options > Debugger Options page and is now renamed Allow side effects and function calls in new watches. This option on the Debugger Options dialog box is the same as the option Allow side effects and function calls on the Watch Properties dialog box.
  • The Registers pane in the CPU Windows has three new Follow context menu commands. Each of these commands positions one of the other panes in the CPU view to the address contained in the currently selected register:
    • Follow > Near Code positions the Disassembly pane to the address contained in the currently selected register.
    • Follow > Offset to Data positions the Memory pane to the address contained in the currently selected register.
    • Follow > Offset to Stack positions the Stack pane to the address contained in the currently selected register.


The following changes have been made to improve support for database application development:


dbExpress has the following new features:

  • dbExpress provides full driver and framework support for:
    • Interbase 2009, including To-Go.
    • MS SQL Server 2008.
    • MySQL 5.1.
    • Firebird
  • Includes source for MIDAS DLL.
  • Date/Time related functions now support:
    • Locale dependent string formatting.
    • Timestamp offset based on locale.
  • A 64-bit integer is now represented as a BIGINT type instead of as a BCD.


New features for DataSnap include:

  • Developers have the ability to process the communications stream between client and server.
  • You can use HTTP as a transport protocol for DataSnap.
  • DataSnap implements callbacks for server to notify client, asynchronous method execution.

See the reorganized DataSnap section in Developing DataSnap Applications and Creating multi-tiered applications Index.

The videos Developing Multi-Tier Solutions Using DataSnap, DataSnap Tooling, and Building DataSnap Clients and Servers provide more information about DataSnap.


For a new overview of VCL user interface features that also applies to 2010, see Building User Interfaces with Delphi 2009, by Marco Cantu.

The following changes have been made to the Visual Component Library and the Delphi runtime library:

  • Rtti Unit. Provides high-level RTTI support (complementing the old TypInfo unit). For a general overview of the features in the Rtti unit, see Working with RTTI.
  • Touch Keyboard: The new framework for using virtual keyboards is located in the Vcl.Touch.Keyboard unit. See Touch Keyboard Overview.
  • TDirect2DCanvas was added to support new Windows 7 Direct2D based canvas. TDirect2DCanvas is not on by default in VCL applications. One must manually create and connect the canvas to an already existing GDI device context. See Using the Direct2D Canvas.
  • There is a TGraphic wrapper for WIC, TWICGraphic, which simplifies loading graphics for Direct2D applications. TIFF is now supported in TImage.
  • The PtInCircle function, similar to the existing PtInRect function, has been added to the Types unit. PtInCircle checks if a specified point falls inside a specified circle.
  • You can now assign a TIcon image to a TBitmap image by using the Assign/AssignTo methods.
  • TStringBuilder now supports a Clear method that allows clearing the stored character array.
  • TProgressBar now supports 32-bit Max, Min and Position properties (on platforms that support it).
  • A new unit IOUtils contains three static classes: TDirectory, TPath and TFile. These classes expose a number of static methods useful for I/O tasks. Most methods are functionally and signature compatible with .NET classes System.IO.Directory, System.IO.Path and System.IO.File.
  • A new method, ReadSubSections, has been added to TCustomIniFile to address inconsistencies with the behavior of the existing ReadSections method between TIniFile and TRegistryIniFile.
  • Hint and CustomHint are now published properties of TEditButton (Left and Right Button of TButtonedEdit). Left/Right Buttons must be visible with glyphs in place for hints to appear, and ShowHint on TButtonedEdit must be True.
  • Themed and gradient styles have been added to the grid components (TDrawGrid, TStringGrid, TDBGrid).
  • Many VCL and RTL functions have been inlined.
  • We have enhanced the TCategoryButtons control to support in-place editing of the button and category captions.
  • A new TThread method NameThreadForDebugging allows you to name a thread that was created without a name. Also use NameThreadForDebugging to rename a specified thread. A thread name is only used to specify thread information in the debugger Threads window.

Tools API

The Tools API provides interfaces that interact with and control the IDE, and enable you to extend and customize the IDE. The Tools API is largely self-documenting. For help, see:

The following changes have been made in Tools API:

  • Version Control: Additions to the interface IOTAProject. See also these two new interfaces:
    • IOTAVersionControlNotifier
    • IOTAVersionControlServices
  • Threads:
    • Support has been added to IOTABreakpoint for Thread conditions.
    • Support has been added to IOTAThread for:
      • Freeze/Thaw threads
      • Accessing a thread's name
      • Using the debugger evaluator to determine if a particular class descends from another class
  • Debugger Visualizers: Debugger visualizer support in:
    • IOTADebuggerVisualizer
    • IOTADebuggerVisualizerValueReplacer
    • IOTADebuggerVisualizerExternalViewer
See also Debugger Visualizers.
  • Visualizers and Breakpoints: Support has been added to IOTADebuggerServices for:
    • Accessing a Module Load breakpoint
    • Removing a breakpoint
    • Registering and unregistering visualizers
  • Dockable Views: Support has been added for creating/showing a dockable view in the IDE. See:
    • INTACustomDockableForm
    • Enhancements to INTAServices
  • Code folding: The number of "code folding" actions you can perform using the ToolsAPI has been increased to more closely match the actions accessible via the code editor's local menu items "Fold" and "Unfold". See the interface IOTAElideActions.
  • Local Language: Support has been added to IOTAServices for getting the IDE's preferred UI language.
  • Top- and Bottom-Level Editor Tabs: Support has been added for creating/showing new editor tabs. This includes support for creating top-level editor tabs, as well as adding additional bottom-level editor tabs. See:
    • INTAEditorServices
    • INTACustomEditorView,
    • INTACustomEditorViewState
    • INTACustomEditorViewStatusPanel
    • INTACustomEditorSubView
    • IOTAEditorViewServices
  • IDE Insight: Support for additions to the IDE Insight. See:
    • INTAIDEInsightItem
    • IOTAIDEInsightCategory
    • IOTAIDEInsightNotifier
    • IOTAIDEInsightServices
  • Compiler Services:
    • IOTACompileNotifier
    • IOTACompileServices.
  • Project Manager Local Menus:
    • IOTAProjectMenuItemCreatorNotifier
    • IOTAProjectManager
    • IOTAMenuContext
    • IOTALocalMenu
    • IOTAProjectMenuContext
    • IOTAProjectManagerMenu

Also see ToolsAPI enhancements, by Chris Hesik.

SOAP Support

New features in RAD Studio SOAP support:

  • The client-side support for SOAP 1.2 has been added. (Note: Server-side is not 1.2 enabled in this release)
  • Deprecated and unused options have been cleaned up.

Online Help Changes

  • New help organization: The major divisions of the help have changed, as shown on the Contents/Navigation bar at the left. The new top-level organization is based on subject matter (not on names such as Common or Win32, as before). The groups of topics below the top level, however, are very similar to the groups in previous RAD Studio help systems. See What's New in the Help, and Where is Everything.
For the release of the product, the help will be shipped with the product as in the past, as H2 help (to be opened in the DExplore viewer).

See Also

Blogs, Videos, and Previews