Borland Developer Studio 2006 Reviewer's Guide

By: Cary Jensen

Abstract: The Complete Windows Development Solution

In This Article

Borland Developer Studio 2006 Reviewer's Guide

The Complete Windows Development Solution


A Borland White Paper

Produced for Borland by Cary Jensen, Jensen Data Systems, Inc.

November 2005



Welcome to the Borland Developer Studio 2006 Reviewer's Guide. This guide is designed to familiarize you with the wealth of new and improved features that you will find in Borland Developer Studio 2006, the next generation in the evolution of Borland's venerable Delphi product line.

That Borland Developer Studio is the latest Delphi has important implications for how you should use this guide. Specifically, if you are not familiar with the features of Delphi 2005, you should read the Delphi 2005 Reviewer's Guide before you continue with this document. The Delphi 2005 Reviewer's Guide provides you with an extensive and detailed introduction to the new integrated development environment that serves as the foundation for Borland Developer Studio, as well the integrated lifecycle management tools. You can find a link to the Delphi 2005 Reviewer's Guide at

If you are already familiar with the features of Delphi 2005, read on and discover the new and enhanced features that make Borland Developer Studio the unsurpassed solution for building software for the Windows and .NET platforms.

This reviewer's guide begins with this brief overview, which includes a discussion of what is included in Borland Developer Studio. The remainder of this reviewer's guide is organized by the major areas of software development and support in Borland Developer Studio. Each section begins with a general overview, which is then followed by a description of the many related updates, enhancements, and additions introduced in this product.

The Ultimate Product

Borland Developer Studio 2006 is the complete solution for building applications for the Windows and .NET platforms. No other product provides you with the full spectrum of tools that Borland provides you in this one product. From collaborative requirements management with Caliber RM, to UML-based design with Borland Together, to team version control and collaboration with StarTeam, to model driven architecture with ECO (enterprise core objects), Borland Developer Studio 2006 provides you with the peerless support tools necessary to ensure the success of your projects. But to have these support tools married to the state of the art suite of development tools for Windows and .NET in Delphi 2006, C#Builder 2006, and C++Builder 2006 is nothing less than a match made in heaven.

Borland Developer Studio 2006 is the result of a convergence of decades of Borland technologies, combined with the thoughtfully integrated support tools that Borland has acquired in recent years. Finally, everything that you need is seamlessly blended into the most complete integrated development environment (IDE) yet. You cannot imagine a better combination of technologies.

Each of the following sections takes a focused look at the new features and enhancements that you will find in Borland Developer Studio 2006. You begin with a discussion of the updates you will find in the IDE. From there, you will learn about the improvements to the editor, debugger, database support, and Web development. Later sections in this document introduce you to the enhancements and updates found in the application lifecycle management tools available to you in Borland Developer Studio 2006.


Not all features described here apply to all editions and all versions of Borland Developer Studio 2006. Please review the Borland Developer Studio 2006 feature matrix to learn which features you will find in each edition. Your link to this feature matrix is located at

The Integrated Development Environment

As a developer, you will greatly appreciate the enhancements found in Borland Developer Studio's integrated development environment. Indeed, more productivity improvements have been introduced in Borland Developer Studio 2006's IDE than in any previously updated Borland IDE.

Regardless of which earlier version of Delphi, C#Builder, or C++Builder that you are currently using, the IDE updates you find in Borland Developer Studio 2006 alone justify the upgrade. If you are not currently using a Borland IDE, you will find that the collective features of Borland Developer Studio's development environment are enough to make you want to switch.

The Improved VCL Form Designer

Component-based development involves a significant amount of time configuring components at design time, and when it comes to graphical user interfaces, this requires a first-class form designer.

For VCL (visual component library) development, Borland Developer Studio 2006 provides you with rich new features for building your using interfaces. These include dynamic alignment guides, design guidelines, and the Form Positioner. Each of these features is described in the following sections.

Dynamic Alignment Guides

Dynamic alignment guides are visual cues displayed in the form editor as you position your visual controls. For most controls, these guides permit you to effortlessly align your controls with respect to their top, left, bottom, and right borders. Specifically, as you drag a control on a form, visual cues appear each time one of the control's edges comes into perfect alignment with an edge of another control on your form.

Consider the following two figures. In the figure on the left, a TEdit (Edit2) is being dragged. The figure on the right shows how the alignment guide appears once the dragged TEdit comes into left alignment with the TEdit above it. The alignment guide disappears as soon as the dragged control is no longer aligned with another control.



For those controls that contain textual elements, alignment guides permit you to align those controls with respect to their text. For example, the alignment guide in the following figure appears when the text elements of the TEdit and TButton come into alignment.


As a component developer, you can specify which elements of your visual controls participate in alignment guides. In addition, you can create new alignment points in your custom components, permitting those developers using your components to effortlessly align your components with respect to specific features they contain.

Design Guidelines

Like alignment guides, design guidelines are visual cues displayed in the VCL designer that permit you to better position your controls. However, instead of cueing vertical and horizontal location, design guidelines provide you with hints about the spacing of your controls.

Design guidelines are associated with the Margins and Padding properties of visual controls and their containers. Using the Margins property, you can define the ideal minimum spacing between your control and other visual controls. Whenever the placement of your control matches the spacing suggested by the guidelines, a line appears. This line is visible in the following figure, in which both an alignment guide and a design guideline are shown.

The design guideline is the short grey line that connects the middle-top of the TButton to the bottom of the TEdit. This line indicates that the current spacing of these two controls satisfies the design guidelines defined by the bottom margin of the TEdit and the top margin of the TButton.


While the Margins property of a control specifies its ideal distance from a margin of another control, the Padding property defines the ideal spacing of controls that appear inside a container from their container's borders. Consequently, only container controls have a Padding property. A design guideline appears when a control's Margin and its container's Padding combine to suggest an ideal distance for the control from its container's corresponding border.

For those components that support an Align property, Borland has introduced a new property called AlignWithMargins. When this property is set to True, the value of Align respects the Margin properties defined for the aligned objects, as well as the Padding properties of the container in which they are aligned. For example, if the Top Padding property of a TPanel is set to 2, and a TMemo with a Top Margin property of 5 and Align property of alTop appears within that panel, setting the TMemo's AlignWithMargin property to True will cause the top of the TMemo to remain exactly 7 (2 + 5) pixels from the top of the TPanel.

While most developers will use alignment guides and design guidelines for design time placement of controls, there is another, powerful purpose for these properties. When used with the new TFlowPanel and TGridPanel containers, Margin and Padding properties are used at runtime to manage the dynamic placement of the controls contained within them. TFlowPanel and TGridPanel are described in detail in the section Visual Control Library Updates, found later in this reviewer's guide.

Form Positioner

There is a new visual cue on the VCL form designer that permits you to specify where on the screen a form will be displayed (so long as the form's Position property allows for default positioning). This cue is called the Form Positioner, and it appears in the lower-right corner of the VCL form designer.

How you use of the Form Positioner is represented in the following two figures. The figure on the left shows the Form Positioner, which in this case indicates that the form, if displayed in the default position, will appear in the upper-left corner of the screen when made visible. If you want your form to appear somewhere else on the screen when displayed, drag the form position indicator within the Form Positioner to the desired location, as depicted in the figure on the right.



Editor Improvements

As a typical developer, there is only one feature of the IDE that you are likely to use more than the form designer, and that feature is the code editor. Fortunately, this is the area where you will enjoy the greatest number of updates and improvements in Borland Developer Studio 2006.

The newly added features include live templates, block surround, and block completion. The enhancements included a greatly improved editor gutter, powerful new refactorings, enhanced method navigation, and updated open unit management features. Each of these new and improved editor features is described in the following sections.

Live Templates

While code templates have been in Delphi since Delphi 4, they seem simple compared to the live templates available in Borland Developer Studio 2006. Live templates offer self-describing, intelligent code insertion, and interactive navigation to the variable parts of the template.

For example, consider the inserted template shown in the following figure. This template was created by executing the forb template, which inserts a for loop with a begin..end block.


Notice that initially the I (the loop iteration variable) is highlighted. This permits you to immediately edit the variable name, if you like. For example, many Delphi developers use a lowercase variable named i as their loop iterator (even though Delphi itself is case insensitive).

You will also notice that the I, as well as the 0 and List.Count appear as bordered text. These bordered text areas represent the variable parts of the live template. After changing I to i, press Tab or Shift-Tab to navigate between the variable parts of the template. As you navigate, you will notice that the hints change to describe the role of the currently selected variable part.

The following figure shows the same live template shown in the preceding figure after you have navigated to the third variable part.


Many live templates, such as the forb template, also support intelligent code insertion, or scripting. With scripting, code executes when you complete the template, conditionally performing one or more tasks for you. In the case of the forb template, if the function in which you insert this template does not already contain a declaration for the loop iterator variable, one will be inserted for you. The following code segment depicts how a previously empty method might look after the execution of the forb live template script.


Invoking Live Templates

Borland Developer Studio 2006 provides you with a large number of standard live templates for each of its language personalities. These templates can be invoked either on demand or automatically.

To invoke a live template on demand, position your cursor within the editor where you want to place the live template and press Ctrl-J. Borland Developer Studio responds by displaying the Insert Template menu, shown in the following figure. Select the template you want to insert from this menu and press Enter.


Similarly, you can begin typing the first few characters of the template shortcut name before pressing Ctrl-J. If only one template's shortcut name matches the characters you've typed, that template is selected and inserted, without the Insert Template menu being displayed. If two or more template shortcut names match what you've typed, the Insert Template menu appears, though only the matching template names are shown, in which case you then select which of the displayed templates you want and press Enter.

Your live templates are invoked automatically when the Code Templates Completion checkbox is checked, as shown in the following figure. With automatic live template invocation, live templates are inserted when you type the name of a template shortcut and press Tab. For example, if you type forb and press Tab with code templates completion enabled, the forb live template is instantly inserted into your code at the position of your cursor.


You can also invoke live templates from the Templates pane, shown in the following figure. To display the Templates pane, select View | Templates from the Borland Developer Studio main menu.


Each of the standard templates that ship with Borland Developer Studio are defined by an XML file, which you can edit if you want to change the template's content or behavior. To edit one of the standard templates, select the template in the Template pane and then click Edit from the Template pane's toolbar. The following figure shows the trye (try ... except) live template in the code editor.


The trye live template is a good example to learn from, since it includes hint, text, and script elements. Furthermore, this is a surround template, which means that a code segment that you select before executing this template will result in the selected block of code being enclosed in the try block.

Custom Live Templates

While the standard live templates that ship with Borland Developer Studio 2006 are extremely useful, you will be delighted to discover that you can create your own, custom live templates.

To create a custom live template, click New from the Templates pane's toolbar. Alternatively, you can select the Template Wizard from the Object Repository. To do this, select File | New | Other from the Borland Developer Studio main menu. Then, select the Template Wizard from the Other Files node of the Object Repository and select Ok.


The new template appears as an XML document in the code editor, as shown in the following figure. As you inspect this figure, you will notice that the new template is displaying hints. This is because the new custom live template is created by a live template. Not only does this reveal the incredible power of live templates, but the hints that are provide greatly simplify the process of creating your own new, live template.


To complete your custom live template, fill in the various variable parts of the template, and add your own elements, as needed, to define the features you want in your template.

In addition to the hints that the Live Template template provides you with, you can read the Borland Developer Studio 2006 help for information on creating custom live templates. You should also examine the standard live templates that ship with Borland Developer Studio 2006 for insight and tips into writing your own, first-rate custom live templates.

  • Surround Templates

Surround templates are a special subset of live templates that permit you to quickly enclose, or surround, a selected block of code. Examples of surround templates include forb, try, procedure, and comment live templates.

For example, imagine that you want to enclose the following code selection in a try ... except block in a Delphi project.


With the desired code selected, select the tryf live template from the Templates pane, and then click Execute. As shown in the following figure, the selected code will be enclosed in the try block, and a finally block will be inserted after it.


Notice also that the code block that you selected has been indented as well, making the resulting code more readable. You are now ready to insert a call to the Free method of the TStringList in the finally block, ensuring its destruction once you are through with it.

You can also invoke a surround template from the Surround menu. Begin by selecting the block of code in the code editor that you want to surround. Next, right-click the selected block and select Surround. Borland Developer Studio responds by displaying a submenu of the surround live templates for your current code personality. For example, the following figure displays the Surround submenu for a selected block of C# code.


Select the desired surround template and press Enter to enclosed in the selected code.

If you create your own custom surround templates, those will automatically appear in the Surround submenu. Specifically, the Surround submenu includes any custom live templates that you've created for the current language personality where the surround attribute is set to true in the <template> element.

Block Completion

Block completion is the latest addition to Borland's Code Insight feature. With block completion, Borland Developer Studio 2006 will automatically complete a code block that you initiate. For example, if you type begin using the Delphi personality, and then press the Enter key, Borland Developer Studio 2006 will complete the block by adding the end keyword. Similarly, type try and press Enter, and the finally and end keywords are inserted.

As mentioned, this feature is sensitive to the language of your current IDE personality. For example, when writing code in C#, entering the open curly brace ({) and pressing Enter causes the close curly brace to be inserted.

Like other aspects of Code Insight, you configure block completion using the Code Insight page of the Options dialog box shown in the following figure.


Notice that you can selectively turn off or on each of the code insight features, as well as configure the default delay before automatic features execute.

The Enhanced Code Editor Gutter

The code editor gutter, that area to the left of the code editor where break points, line numbers, and bookmarks appear, has received a significant facelift in Borland Developer Studio 2006. In short, the code editor gutter is now less cluttered, while providing significant improvements in information content. Many of these improvements can be seen in the following figure.


One of the first things that you will notice is that line numbers are not displayed on every line. Instead, line numbers are displayed every 10 lines, by default. In addition, a line number always appears on the current line, which is line 238 in the preceding figure. This feature is configurable, in case you really do want to see line number on every line of code.

In addition, bookmarks and breakpoints now occupy less space than in previous editors, once again resulting in a less cluttered look. This can be seen in the preceding figure, where a line number and a breakpoint both appear on line number 239.

But the feature that you are likely to find most exciting is the change bar, which is a visual cue that appears on the right side of the left gutter. By default, lines that have been changed since you opened the current source file are marked with visual indicators. Those lines that have been modified, but not yet saved, are marked in yellow (by default). Lines that have been changed, and already saved, are marked in green.

As is the case with all color coding available in Borland Developer Studio 2006, you can customize the actual colors used to identify these changes.

Improved Method Navigation

Delphi 6 introduced module navigation, which permits you to quickly move between the methods in your class type declarations and their corresponding implementations by pressing Ctrl-Shift-Up arrow and Ctrl-Shift-Down arrow. In Borland Developer Studio 2006, method navigation has received another significant update with the introduction of method hopping.

Method hopping permits you to quickly move between the methods of a unit by pressing Ctrl-Alt-Down arrow (to navigate to the next method in the implementation section) and Ctrl-Alt-Up arrow (to move to the previous method). Similarly, pressing Ctrl-Alt-Home moves to you the first method implementation in the source file and Ctrl-Alt-End moves you to the last.

In its normal mode, method hopping moves between method implementations without respect to class. For example, pressing Ctrl-Alt-Down arrow will move you to the next method (if one exists), even if it is a method for a class different than the one your cursor is currently pointing to.

You can control this behavior by using class lock, which you invoke by pressing Ctrl-Q^L (Ctrl-Q, followed by L). When enabled, method hopping with class lock limits your navigation to the methods of the current class. For example, with method locking enabled, pressing Ctrl-Alt-Home moves your cursor to the first method of the current class in your source file, while Ctrl-Alt-Down arrow moves you to the next method in the current class. If you are on the last method implementation in the current class and you press Ctrl-Alt-Down arrow, your cursor does not move.

While in class lock mode, pressing Ctrl-Q^L again disables class lock.

While module navigation doesn't apply to C# and C++ code, method hopping does. Class lock, however, is currently only available in the Delphi and C# editors.

Improved Page Management

Two improvements to editor page management have been introduced in Borland Developer Studio 2006. The first is that you can now configure whether units opened during debugging remain open or not once you exit the debugger.

Specifically, when you step into a unit that is not already opened in the code editor, that unit is opened automatically. Previously, that unit would have remained opened after you exited the debugger. You can now control this behavior by enabling or disabling the Automatically close files implicitly opened while debugging check box on the Debugger Options page of the Options dialog box, shown in the following figure.


The second code page management upgrade can be found on the code page right-click menu. This menu now includes an option to close all opened pages, with the exception of the code page you right-click, as shown in the following figure.


Together, these improvements to code page management save you time and reduce clutter in your editor.

New Refactorings

Refactorings were introduced in Delphi 2005, and Borland Developer Studio 2006 introduces a number of important new refactorings.

For the Delphi personality, the change parameter refactoring permits you to quickly modify a method declaration and its implementation block. This feature allows you to quickly add and remove parameters, as well as change the default values of existing parameters.

To use this feature, select a method, function, or procedure in the editor (either its declaration in your class or its implementation) and select Refactor | Change Params. Use the Change Parameters dialog box, shown in the following figure, to make the changes you want.


In addition, a large number of pattern-related refactorings have been introduced in both the C# and Delphi personalities. These refactorings include move, extract interface, extract superclass, pull members up, push members down, safe delete, inline variable, introduce field, and introduce variable. In order to use these refactorings, you must enable modeling support in your corresponding C# or Delphi project.

Finally, the powerful rename refactoring has been introduced in the C++ personality.

Updated Memory Manager

There is one major enhancement in particular that affects every aspect of the IDE, as well as any Win32 applications you compile using Borland Developer Studio 2006, but this enhancement is not visual in nature. Borland Developer Studio received a significant upgrade in the form of a new memory manager. Based on FastMM, the new memory manager optimizes memory utilization while provide significantly better performance.

Importantly, this same memory manager is included in any Win32 applications that you compile with Borland Developer Studio 2006. In other words, without making any other changes to your code, simply re-compiling any of your existing Win32 Delphi or C++ applications in Borland Developer Studio 2006 will improve the performance of those applications.

While the new memory manager has no affect on compiled .NET code (that is the responsibility of the .NET just-in-time compiler), it does provide significant performance improvements in the Borland Developer Studio 2006 IDE even when you are working with .NET applications.

Visual Component Library Updates

The Visual Component Library (VCL) is the principle library for development in Win32 Delphi and C++Builder applications. It is also the compatibility library for Delphi for .NET applications.

As in every other release of Delphi, Borland Developer Studio 2006 now includes several new and valuable components, as well as some enhancements that affect a large number of existing components. These are described in the following sections.

New Components

There are three significant new components in the VCL. Two of these, the TGridPanel and TFlowPanel, are specialized containers that enable dynamic runtime layout of the controls they contain.

The TGridPanel component provides component layout similar to that available in an HTML table or in a Java GridBagLayout layout manager. Specifically, you configure a TGridPanel to have a specific number of rows and columns. When the size of the TGridPanel changes, the position, and potentially the size, of controls contained within its cells are adjusted. Importantly, the new positions (and sizes, if applicable) respect the Padding properties of the TGridPanel, as well as the Margin properties of the controls displayed in the cells.

The TFlowPanel is a specialized panel that positions the contained controls similar to how a word processor wraps the text in a document. (It is also similar to the Java FlowLayout and VerticalFlowLayout layout managers.) By default, this flow is right-to-left and top-to-bottom, though the TFlowPanel can be configured to use every other combination of flow.

The third significant new component is the TTrayIcon component. This component permits you to easily create applications that appear as icons in the system tray of the task bar. Among the properties of the TTrayIcon component are those that permit you to select the glyph to display, a popup menu to associate with the icon, whether that icon is animated or not, balloon hints, and event handlers that respond to a user's interaction with the icon, to name a few.

Intellimouse Support for VCL

The VCL now supports intellimouse scrolling in any container class that supports mouse scrolling. In order to enable intellimouse scrolling, simply add the IMouse unit to your project source uses clause, or any other uses clause for that matter. (Although for ease of maintenance, you are encouraged to use the project uses clause or the interface section uses clause of your main form.)

IMouse only needs to appear once in your project to affect all scrollable containers.

When you enable intellimouse support, scrollable VCL containers can be scrolled using the mouse-wheel, or equivalent interface, on your pointing device, given that your pointing device supports intellimouse scrolling. If you want to enable intellimouse scrolling in your custom components, ensure that the csPannable flag appears in your control's ControlStyle set property.

Other VCL Enhancements

In addition to the preceding updates to the visual control library, Borland Developer Studio 2006 includes a new class, named TCustomTransparentControl, which you can descend from if you want to create transparent visual controls.

In addition, some of the existing classes in the VCL have been enhanced. For example, Borland Developer Studio 2006 introduces accessibility enhancements to the TActionBar component, as well as color gradients to the TControlBar and TToolbar components.

For a complete list of updated and enhanced components, "What's New in Borland Developer Studio 2006" from the Welcome page in the IDE.

Debugger Enhancements

No comprehensive development environment would be complete without a world-class debugger, and Borland Developer Studio 2006 has two of them. One debugger is for Win32 debugging and the other is for .NET. As in all other areas of Borland Developer Studio 2006, Borland has introduced a number of performance and feature enhancements to these debuggers.

Some of these updates are relatively minor, providing you with added convenience. For example, individual breakpoints can now be easily enabled or disabled by simply Ctrl-clicking the breakpoint in question in the editor gutter. Likewise, as mentioned earlier in this guide, code files that are implicitly opened during debugging can be configured to automatically close when execution terminates. Another enhancement is that you can now copy content from the CPU window to the Windows clipboard.

On the other hand, there are also some major enhancements and updates to Borland Developer Studio 2006's debuggers. These are described in the following sections

Remote Debugging

More so than ever, the applications you build today are likely to execute in a distributed environment, an environment that introduces significant challenges if you need to debug a remote process. Fortunately, Borland Developer Studio 2006 marks the return of one of Delphi's more powerful debugging features – remote debugging.

With the remote debug server, you can use your development machine to step into code that is running on another computer on your network or the Internet. With remote debugging, you can see first hand how your program is actually running on the server to which it is deployed.

Expandable Watches and Local Variables

When debugging, the properties and fields of symbols that appear in the Watch List and Local Variable panes are now expandable. This feature greatly reduces desktop clutter while you are debugging.

Examples of expandable symbols are shown in the following figure. Here the Local Variables pane is used to inspect Self, which in this case is the main form of this project. Notice that each of the form's properties and fields can be expanded, which in turn can be further expanded. You had to open multiple inspector windows in previous versions of Delphi to obtain this same information.


Tooltip windows are also now expandable. Specifically, when you pause your cursor over a symbol while the debugger is engaged, and the symbol can be drilled into, the displayed tooltip includes a plus sign ("+") that you can click to expand the help. The following figure shows a portion of an expanded tooltip displayed by the debugger.


Grouped Watches

Watches can now be grouped, permitting you to better organize and control the symbols whose values interest you. You assign a particular watch to a group when you define the watch. As you can see from the Watch Properties dialog box shown in the following figure, you can select the name of the group to which the watch belongs when you define it.


Each group is represented by a separate tab in the Watch List pane. To view the symbols for a particular group, select the tab for that group. The Watch List pane in the following figure contains two groups, Watches and locals. In this figure the locals tab is currently selected.


To further support groups, the Watch List context menu has been updated to permit you to add, delete, and manage your Watch List groups. This menu is shown in the following figure.


Symbol Table Management

Borland Developer Studio 2006 now permits you to control the order in which symbol tables are loaded for the module you are debugging. You can also choose to restrict the debugger's search to particular symbol tables, a technique that can improve your debugging performance.

To configure symbol table usage, use the Symbol Tables node of the Project Options dialog box, as shown in the following figure. You can also access this feature from the Run Parameters dialog box, which you display by selecting Run | Parameters from the Borland Developer Studio main menu.



Delphi's exceptional database support has always set it apart from other development environments¾ this legacy continues with Borland Developer Studio 2006. And although Borland Developer Studio 2006 has far more database support than any other single product, Borland has managed to squeeze even more database features into this release. These are described in the following sections.

Support for dbExpress in the Data Explorer

The Data Explorer, shown in the following figure, now includes support for dbExpress databases. Features accessible from the Data Explorer for dbExpress-supported databases include SQL testing and execution, stored procedure execution with parameter definition, data viewing, and drag-and-drop placement of components in the designer. These features apply to both for VCL and VCL for .NET applications.


Improved BDP for ADO.NET Support

Borland Developer Studio 2006 introduces a number of enhancements to Borland Data Providers (BDP) for ADO.NET. These include connection pooling and SQL tracing. These features are described in the following sections.

BDP for ADO.NET Connection Pooling

One of the more welcome updates to BDP for ADO.NET is the introduction of connection pooling.

A connection pool is a dynamic collection of database connections that can be shared by multiple threads or processes. When a thread or process needs a connection, it requests the connection from the pool. In responses, either the connection pool returns one of its connections that is not currently being used or it creates a new connection to return. When the thread or process is through with the obtained connection, it releases it back into the pool, making that connection available for the next thread or process.

The alternative to a connection pool is to create, connect, disconnect, and then destroy a connection for each thread or process that requires a connection. Because there is significant overhead associated with connecting and disconnecting connections, a connection pool can deliver significant performance improvements, particularly in environments where many connections are needed, but each is used for only a short time.

ASP.NET is one such environment. Each Web page or Web service method invocation in an ASP.NET application often needs a connection only briefly before releasing it back into the pool. And because all BDP for ADO.NET drivers support connection pooling, your use of BDP for ADO.NET ensures that all of your ASP.NET applications perform at their best.

BDP for ADO.NET SQL Tracing

Another new feature of BDP for ADO.NET is the option to trace SQL statements. Simply add the Tracing=True string to the BdpConnection.ConnectionOptions property and the BdpConnection component will write all SQL statements that it executes to the Windows EventViewer. (Strings in the ConnectionOptions property must be separated by semicolons.)

If you prefer to handle the SQL tracing yourself you can add a Tracing event handler to your BdpConnection component. The Message property of the BdpTracingEventArgs parameter passed to this event handler contains the SQL trace. You can do whatever you like with the trace information, such as write it to a text file or display it in a dialog box.

The Reconcile Error Dialog Box

Borland Developer Studio 2006 now also includes a reconcile error dialog box for use with the BDP for ADO.NET DataHub component. This dialog box, which is similar to the reconcile error dialog box previously found only in Borland's DataSnap technology, provides you with a convenient mechanism for permitting your users to respond to errors encountered while trying to resolve changes from a .NET DataSet back through its data adapter.

Borland Database Drivers

BDP for ADO.NET now ships with support for MySQL 4.0.24, further increasing your database options. The following table contains a complete list of the databases that are directly supported by custom Borland drivers through BDP for ADO.NET and dbExpress. Note, however, that Borland Developer Studio also provides access to virtually every available database through its support for the Borland Database Engine, Ole Db Providers, ODBC drivers, ADO.NET data providers, as well as third-party database components.



Borland ® InterBase ® V 7.5
and 7.5.1

Borland ® InterBase ® V 7.5
and 7.5.1

Oracle ® 10g

Oracle ® 10g

IBM DB2 ® 8.x

IBM DB2 ® 8.x

MS SQL Server ™ 2000 and 2005 and MSDE ® 2000

MS SQL Server ™ 2000 and 2005

Sybase ® 12.6

Sybase ® 12.6

MySQL ® 4.0.24

MySQL ® 4.0.24

Informix ® 9

SQL Anywhere ® 9

Other Updates to dbExpress

In addition to Data Explorer support for dbExpress, dbExpress has received several additional upgrades in Borland Developer Studio 2006. For instance, the TSqlQuery and TSqlDataSet components now support both IN and OUT parameters. In addition, dbExpress for .NET now includes full Unicode support.


Delphi 2005 provided extensive support for ASP.NET applications. As you would expect, further enhancements to this support are found in Borland Developer Studio 2006.

One of the more welcome updates to Borland Developer Studio 2006's support for ASP.NET is a major update to its HTML support in ASP.NET Web Forms applications. Due to this improvement, Borland Developer Studio preserves the customizations that you add to the HTML that it generates as you use the designer. Previously, custom HTML was subject to removal when the designer regenerated your HTML tags.

Additional updates to Borland Developer Studio 2006's support for ASP.NET applications are described in the following sections.

Deployment Improvements

One of the useful ASP.NET features introduced in Delphi 2005 was its automated ASP.NET deployment. That deployment, however, only supported those files associated directly with your ASP.NET projects. Those files included your global.asax, web.config, asmx file, and bin directory files.

With Borland Developer Studio 2006 you can declare any additional files that you need in your ASP.NET applications as deployable files, and Borland Developer Studio 2006's ASP.NET deployment will ensure that those files are updated, if necessary, each time you deploy.

Changeable Layout

Previously, once you committed to a layout on a Web form (FlowLayout versus GridLayout), you could not change the layout without having to rebuild the form from scratch. Borland Developer Studio 2006 now permits you to change the layout of your ASP.NET Web forms even after you begin designing them. This feature allows you to easily recover if you change your mind about which layout best suits your Web form.

Additional Cassini Support

Cassini is a C#-based Web server that you can use for testing your ASP.NET Web forms and Web services applications. In Delphi 2005 and earlier you needed to explicitly compile Cassini if you wanted to use it to run and debug your ASP.NET applications. Using Cassini is easier with Borland Developer Studio 2006 as a compiled version of Cassini is installed for you automatically.

In addition, Borland Developer Studio 2006 provides improved support for debugging your ASP.NET applications using Cassini, further improving the speed and efficiency with which you build your Web-based applications.

New View Page in Browser

Previously, you designated one of the Web forms within your ASP.NET Web application as the start page, and this page was the page that was initially displayed when you launch your Web application for testing purposes. If you wanted to view one of the other pages in your ASP.NET Web application, you needed to launch the start page, and then use the Browser to request the desired page or use links from your start page.

With Borland Developer Studio 2006, you can immediately test any page in your ASP.NET Web forms application by right-clicking that page and selecting View in Browser. In response, Borland Developer Studio launches your designated Browser and displays the page you selected. The result is fast turnaround when testing pages that are nested deeply within your ASP.NET Web applications.

Delphi Language Enhancements

The Delphi language is mature, providing you with nearly everything that you need and want in a sophisticated and modern programming language. Nonetheless, Borland has managed to add a couple of additional enhancements. These are described in the following sections.

Enhanced Support for Records

Several enhancements have been introduced for record structures. The most important of these is that records now support properties and methods.

While a record with properties and methods sounds more like an object, it is not. Specifically, records are value types and are allocated on the stack. By comparison, objects are reference types and are allocated on the heap. Additional differences are that records do not support inheritance whereas objects do, records use copy on assignment semantics while objects do not, and records include an automatic constructor while objects must be explicitly instantiated.

One additional capability added to records is operator overloading. You create an operator overload by introducing a class operator method into your record declaration using one of the following names: Implicit, Explicit, Negative, Positive, Inc, Dec, LogicalNot, BitwiseNot, Trunc, Round, Equal, NotEqual, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, Add, Subtract, Multiply, Divide, IntDivide, Modulus, ShiftLeft, ShiftRight, LogicalAnd, LogicalOr, LogicalXor, BitwiseAnd, BitwiseOr, and BitwiseXor. Your implementation of the declared class operator method defines how the overloaded operator behaves.

The following is an example of a record type named TBlock. The add (+) operator of this record is overloaded:


Record declarations in Delphi for .NET applications support interfaces, but those in Win32 Delphi do not.

Class Variables

Classes in Delphi for Win32 now support class variables. A class variable is stored in a single memory location that is shared by all member of the class, as well as by descendants of that class. Class variables join the static class constants that were introduced into Delphi for Win32 in Delphi 2005.

More Inlining of RTL Functions

Even more of Delphi's runtime library (RTL) has been inlined in Borland Developer Studio 2006, including the Length function, which is one of the more frequently called functions.

When a function is inlined, the compiler generates the code to perform the operation and inserts this code in place of each function invocation. Without inlining, the compiler generates the function code only once, and all calls to that function require a jump to the generated code.

In some cases, such as in the Length function, the amount code that must be generated to perform the jump is greater that the amount of code in the function itself. With functions like Length, inlining produces more efficient code.

While this feature is really more a feature of the Delphi compiler, it does affect the code you write in the Delphi language, which is why this feature is described in this section of the reviewer's guide.


Although it has only been mentioned in passing up to this point, one of the major additions to Borland Developer Studio 2006 is the integration of C++Builder. Finally, all of Borland's Windows-based development, design, and collaboration tools are tightly integrated into one comprehensive package, permitting you to use the right tool for the job, and without compromises.

C++Builder is the world's leading C++ development tool for creating Windows applications. In addition to its support for industry standard C libraries, C++ builder is unique in that it also supports Borland's VCL, the most complete and easy to use component library available for Windows development. No other C++ environment comes close to the ease with which you can build Windows applications using C++Builder.

Borland has introduced significant updates to the C++ compiler, linker, and Turbo Dump utility in this release of C++Builder. Additional new features of C++Builder are described in the following sections.

A Feature Rich IDE for C++

If you use C++, you will be delighted to learn that C++Builder 2006 is more than a simple port of Borland's previous editions of C++Builder. It marks the union of C++Builder with Galileo, Borland's state-of-the-art IDE that stands at the center of Borland Developer Studio 2006. And C++Builder 2006 combines this IDE with the latest version of Borland's C++ compiler, Borland C++ compiler 5.8.

You now have the most advanced C++ compiler available combined with the advanced features only found in Borland Developer Studio, including refactoring, live templates, the intelligent code editor gutter, the history tab, CaliberRM, StarTeam, the structure pane, model view, and the list goes on and on.

C++Builder also supports .NET header files for unmanaged API's (cor.h), as well as the same high-level support for DLL import libraries previously found only in Delphi 2005. Additional new and enhanced features found in C++Builder 2006 are described in the following sections.

Build Events and Configurations

As a C++ developer, you have more sophisticated needs, as far as compilation goes, than Delphi or C# developers. Fortunately, Borland Developer Studio 2006 recognizes these needs, and provides you with tools that simplify the process. These include build events and build configurations.

Build events are operations that you want to perform before and after compilation, as well as prior to linking. You define a build event by right-clicking a C++ project in the Project Manager and selecting Build Events. The Build Events menu is shown in the following figure.


After selecting which type of build event you want to create, you use the Build Event dialog box to specify the commands to execute. As you can see in the following figure, the Build Event dialog box provides you with a number of macros that can be used in conjunction with your commands. These macros expand at runtime, providing your commands with great flexibility.


Build configurations permit you to define one or more sets of reusable compiler options. You choose which build configuration to use when you are ready to compile and the defined set of compiler options will be used. For example, you will typically use one build configuration for a debug build, and another for your final deployment build.

You define build configurations from the Project Options dialog box for a C++ project, as shown in the following figure. The Build Configurations drop-down menu is displayed in this figure, showing the two default configurations.


Once you have selected a build configuration, you use the Options dialog box to set the various options that you want to associate with it. You can also click the Configurations button on the Options dialog box to display the Build Configurations dialog box. Using this dialog box you can create a new build configuration, delete a configuration, or change the name and directory associated with an existing configuration.


Integrated CodeGuard

CodeGuard is a sophisticated debugger add-on designed to catch and report errors that the Borland Developer Studio 2006 debugger cannot. In particular, CodeGuard permits you to track memory and resource usage, as well as validate function arguments and return values.

You enable CodeGuard using the CodeGuard compile support page of the Options dialog box for a C++ project, as shown in the following figure. CodeGuard messages will appear in the Message pane when you compile and run a project using a CodeGuard-enabled build configuration.


Dinkumware Runtime Libraries

As a C++ developer, you are likely to be concerned about standards and the conformance of your C+ standard libraries. These concerns are addressed in Borland Developer Studio 2006 with the inclusion of the Dinkumware runtime libraries. In testing, these libraries have been shown to conform to ISO (International Organization for Standards) specifications for C++ standard libraries. Few other C++ standard libraries can make this claim.

CORBA Support

CORBA, the common object request broker architecture, is the object-oriented, vendor independent standard for inter-process communication from the Object Management Group (OMG), an international consortium of businesses and academic institutions.

C++Builder 2006 provides you with the support you need to build first class CORBA servers and clients. C++Builder 2006 provides you with support for the latest version of Borland Enterprise Server, VisiBroker Edition, version 6.5. In addition, Borland Developer Studio 2006 provides improved handling of IDL files from within the Project Manager, including full access to all IDL2CPP compiler options without leaving the IDE.


ECO (pronounced ee'ko) is a standards-based framework for Enterprise application development. The primary design standards employed by ECO are UML (the unified modeling language) and OCL (the object constraint language).

Though your experience while developing an application with ECO is primarily a visual one, ECO is really a runtime framework that takes responsibility for instantiating objects from an object store (typically a database, but other stores are also possible), managing object relations, enforcing object constraints, and persisting those objects when you are through with them.

Borland Developer Studio 2006 includes ECO III, the next generation of ECO. ECO III includes a number of enhanced and new features. Together, these make ECO-based applications not only easier to build, but more powerful than ever.

Among the ECO III enhancements is improved XMI (XML metadata interchange) import and export capabilities, improving your ability to use and maintain your models with your favorite UML modeling tools. In addition, ECO III contains additional tools that permit you to build your ECO applications based on existing databases, and even the ability to have an application span across multiple and mixed databases.

Other enhancements include the introduction of new ECO-based .NET extenders, an improved mechanism for componentizing your models into reusable packages, as well as new and improved auto-form generation. New features include a powerful extension to OCL (which Borland calls the ECO Action language), direct support for domain patterns, new data type mappings, and state machine diagrams. Each of these features is discussed in the following sections.

The ECO Package in Package Wizard

ECO packages contain the UML and OCL definitions that are used at runtime to instantiate, implement, and persist the objects that you use in your ECO applications. In the past, your ECO applications typically consisted of one UML diagram that included all of the class definitions that you use in your ECO application.

With ECO III, your ECO applications can be constructed from one or more packages, each of which contain class definitions that contribute to your applications. When building applications using two or more packages, you can think of the classes in each package as being the building blocks for the greater application.

A significant advantage of this approach to building your applications is that you can reuse packages between different ECO applications. For example, you may construct a package whose classes define employees, departments, and other employment-related classes. This package can then be used within any ECO application where employees, departments, and the like are needed.

The following figure shows the project manager with two ECO projects. The first project, TravelAppCorePackage, contains the primary classes for the travel assembly. These classes are being used in the second application, an ECO-based ASP.NET application. Because these classes appear in an independent package, they can also be used in a future Windows forms application.


The ECO Action Language

OCL, the object constraint language, is an expression language that you use to restrict attribute values in ECO managed objects at runtime. In its formal specification, OCL is specifically prevented from producing side effects. That is, OCL expressions are not intended to perform operations, other than their intended validations.

Side effects, however, are a critical part of most interactive applications. In order to address this limitation of OCL, Borland's ECO Action language is a derivative of OCL that permits side effects. These side effects can be performed by ECO Action language function calls, as well as the invocation of methods in ECO classes.

By allowing side effects, ECO Action language permits you to embed a significant amount of program logic in your models, thereby further reducing the amount of custom code that must be added to your applications. As you know, any reduction in custom code improves the maintainability of your applications.

ECO Action language is especially useful in the new state machine diagrams, where you use the ECO Action language to define an action at a state transition or as an entry or exit action for a state. State machine diagrams are described in detail later in this section.

Pattern Support

Design patterns are formally defined solutions to reoccurring problems in software development. In most cases, design patterns define a set of interactions between objects that can be reused in a variety of software solutions.

ECO III provides support for patterns in two ways. First, using the version of Borland Together that is included in Borland Developer Studio 2006, you can quickly and easily implement some of the more common design patterns. Together ships with definitions for all of the “Gang of Four” patterns, making modeling of common patterns such as Mediator as simple as bringing up the Pattern Organizer and selecting Mediator from the list of bundled patterns. The classes, attributes, and association that make up the selected pattern are then added to your model.

Second, you can create your own custom patterns. These can then be used repeatedly throughout your ECO applications. You create a custom pattern by simply modeling a collection of classes, attributes, and associations in the designer, and then right-clicking and selecting Save As Pattern.

Alternatively, you can mine a pattern from your existing designs using a similar process. Either way, the saved pattern, along with some descriptive text, is saved in the same repository as the standard patterns, permitting them to be shared with the rest of your development team.

Additional information about pattern support in Borland Developer Studio 2006 is provided later in this guide in the section on Borland Together.

New ASP.NET Auto-Forms

Auto-forms are automatically generated forms that ECO creates at runtime to permit you to rapidly test your UML models. With ECO III, auto-form generation has been extended to ASP.NET, allowing you to instantly prototype your Web-based applications.

The following figure shows an HTML page that was generated by ECO III's ASP.NET auto-forms feature.


Language Independent Data Type Mappings

With previous versions of ECO, you used language specific types when you declared types in your ECO class diagrams. For example, in C# you would declare an integer attribute as an int, but with Delphi the same attribute would be declared an Integer.

ECO III uses language agnostic types in the designer, and automatically translates them to language specific types behind the scenes. For example, you can declare a type int for the Delphi language, and ECO will translate that to Integer. This feature is especially useful if you develop in several languages, permitting you to concentrate on your class diagrams without having to concern yourself with which language you will ultimately use.

There is an addition benefit of data type mappings. You can use this feature to create your own custom aliases for standard types. For instance, you can declare a type s, and map it to the String type. You can then use the alias s anytime you want a String attribute or method, and permit ECO to perform the type translation for you.

The New ECO .NET Extenders

In the .NET framework, .NET extenders permit you to register enhancements to existing classes. This feature permits you to enrich an existing class without having to descend a new class from it. The standard ToolTip component, for example, uses this concept to extend all visible controls with ToolTip properties.

ECO uses existing .NET controls through standard .NET data binding, and ECO extenders make it even easier to use the .NET controls you are accustom to using. ECO III continues this approach by offering you a collection of new and improved extenders that further ECO-enable existing .NET classes.

The ECOActionListExtender has been enhanced to support menu items. With this enhanced extender your users can trigger ECO actions simply by selecting from an appropriately configured menu item.

New extenders include the EnableOCL and VisibleOCL extenders. These extenders permit you to define Boolean OCL expressions that control the enabled and visible properties of visual controls, respectively. Operations that you would have previously had to code manually can now be implemented with these extenders through OCL definitions.

Of course, as is typically the case with .NET extenders, it is possible to achieve any of the effects provided for by ECO extenders without using the extenders. But like wizards, extenders streamline the process.

State Machines

A state machine is any object or device that can possess, at various times, distinct states or conditions. Further, these states or conditions can be transformed to another state or condition as a result of input or change of status.

ECO III permits you to add state machine diagrams to your designed classes, visually diagramming the states and conditions of state transition. ECO state machines support standard UML state machine diagram concepts, such as transitions, triggers, effects, guards, entry actions and exit actions. A trigger is the operation that makes a state transition occur, while effects and entry/exit actions, implemented in ECO Action language, are actions that can control some behavior when a state transition occur.

Guards, on the other hand, are OCL statements that must evaluate to true before a transition can occur. For example, the selected guard in the following state machine diagram expresses the rule that before a Travel Activity can transition from the Submitted state to the Approved state, there must be enough budget remaining in the current Department to cover the cost of the activity.

Screenshot - ECO StateMachine guard showing2005-11-08 , 17_05_41

Borland Together

Borland Together is the visual tool that you use to create UML models for your applications. When used with ECO III, these models can be used to generate the objects that you can use directly in your applications.

In response to customer feedback, Borland has reengineered the Together engine to provide better performance and more efficient use of memory. This updated Together engine is seamlessly integrated into Borland Developer Studio 2006.

You begin a design project in Borland Developer Studio 2006 by selecting the appropriate wizard from the Design Projects page of the Object Repository. As you can see in the following figure, both UML 1.5 and UML 2.0 projects are support. This figure also shows the Convert from MDL wizard, which you use to import models from Rational Rose.


In addition to supporting UML design patterns, you can use Together to create many other industry standard diagrams, including use case diagrams, class diagrams, and sequence diagrams. The following figure shows the Add New Diagram dialog box, which shows the various new diagram wizards available in Together.

Metrics and Audits

More than simply a modeling tool, you can use Together to analyze your existing projects, generating metrics and audits that you can use to uncover potential problems with your applications. For example, the following figure shows a Together-generated Kiviat chart. A Kiviat chart depicts a best practices circle. Points that are within the inner circle are considered acceptable, and those outside denote areas that may deserve your attention.

For example, in the graph shown here the depth of inheritance hierarchy (DOIH) appears outside the user-defined inner circle. This metric indicates that one or more of your classes are abnormally deep, with respect to the root class (Object or TObject).

The inner-circle is user-defined because you set the limits for the metrics used by Together. The following figure shows the QA Metric dialog box where these metrics are configured.

The use and configuration of audits is similar to metrics. The following figure shows the QA Audits dialog box, which contains the audits equivalent to the QA Metrics dialog box.

Design Patterns

As mentioned earlier, Borland's Together now provides you with high-level support for design patterns. Borland Developer Studio 2006 ships with a large number of industry-standard patterns, including those defined in the now classic book Design Patterns: Elements of Reusable Object-Oriented Software (1995, Addison-Wesley Professional Computing Series) by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (affectionately know as the Gang of Four, or GoF).

In addition to the bundled patterns, you can also create and save custom design patterns. Both the bundled patterns and your custom patterns can be accessed using the Pattern Organizer, which is shown in the following figure.


Document Generation

One of the major benefits to you from the Together integration is the automatic generation of documentation. This documentation is generated as HTML, permitting you to view it in a browser, as well as permitting you to post it to your team's internal project Web site.

To generate HTML documentation using Together, right-click the Model View pane from a Together-enabled project and select Generate Documentation. Use the Generate Documentation dialog box, shown in the following figure, to select the information that you want to include in the generated documentation.


The following figure shows a sample of Together-generated documentation being displayed in a browser.

Integrated StarTeam

StarTeam is Borland's team collaboration and source code management suite. Delphi 2005 introduced StarTeam integrated into the IDE. With Borland Developer Studio 2006, this integration is even better, including support for features found in the advanced editions of the StarTeam product line.

Among the now included features is StarTeam requirements, additional tasks, and topics for discussions, all accessible without ever leaving Borland Developer Studio 2006. For example, the following figure shows a change request being added into the StarTeam repository.

The History tab of the content pane reveals the depth of StarTeam's integration with Borland Developer Studio 2006. As you can see from the following figure, two versions of the displayed source are being compared. These two versions had been checked into the StarTeam repository. In addition to this Diff view, StarTeam supports advanced Diff and Merge features, and even permits you to show Diff views for a file whose name has changed over time.

In addition to the tight integration in Borland Developer Studio 2006, Borland has also introduced a new licensing scheme for StarTeam. When you purchase Borland Developer Studio 2006 Enterprise or Architect, your product includes a StarTeam license. This license is additive (or as Borland calls it, "stackable"), permitting your StarTeam license to be added along with your other development teams' licenses, providing you with full team support right out of the box. In addition, the Borland Developer Studio version of StarTeam is upgradeable, meaning that you can upgrade your stackable licenses to the more advanced editions of StarTeam.

Integrated CaliberRM

CaliberRM permits you to gather, monitor, and trace requirements. And like StarTeam, CaliberRM is tightly integrated into Borland Developer Studio 2006. For example, the following figure shows CaliberRM being used from within Borland Developer Studio 2006 to define a trace that is linked directly to code.

This integration allows developers to be notified as soon as a requirement changes. The integration found inside Borland Developer Studio 2006 also has an advanced feature not found in other CaliberRM integrations, which is the ability to add new requirements. The following figure shows how Borland Developer Studio 2006 looks as you are adding a new requirement. This requirement can then be promoted throughout the entire requirements process.


At the beginning of this reviewer's guide you learned that Borland Developer Studio 2006 is the ultimate development tool, providing you with a peerless combination of development and support tools in a tightly integrated product.

Without question, Delphi 2006, C++Builder 2006, and C#Builder 2006 are the best and most flexible tools available for building applications for the Win32 and .NET platforms. But the benefits of having these developer tools tightly integrated with world-class application lifecycle management tools simply cannot be stressed enough.

The seemless integration you find in Borland Developer Studio 2006 helps foster better communication between you and the other major stakeholders of your project and development teams. By enabling better communication, you can design and develop faster and better, and significantly reduce missteps. The Together integration allows you to provide advanced models of your systems before and during the development process, and the code audits and metrics ensure that what you are developing is of the highest standards and is easier to maintain.

The StarTeam integration gives you much more than the standard check-in and check-out process that you normally associate with a source code version control system. It permits you to submit change requests and generate automatic notifications of underlying changes directly to your team. In addition, the type of license you get with Borland Developer Studio 2006 means that you and your team are ready to work together. It also allows you to upgrade at a significant savings to more advanced versions that support bug tracking, newsgroups, and customized workflow capabilities.

Having up to date requirements is key to your producing quality results on time. A recent report found that 71% of all projects that failed did so in part due to poorly defined requirements. The integration found in Borland Developer Studio 2006 increases your team's communication throughout the entire lifecycle of your project. Not only will this ensure that your projects run smoother, but it also allows you to implement projects that are in concert with your organization's needs.

About Borland Software Corporation

Founded in 1983, Borland Software Corporation (NASDAQ: BORL) is the global leader in platform independent solutions for software delivery optimization. The company provides the software and services that align the teams, technology and processes required to maximize the business value of software. To learn more about delivering quality software, on time and within budget, visit:

About the Author

Cary Jensen is President of Jensen Data Systems, Inc., a software development, training, and consulting company ( He is an award-winning, best-selling author of nineteen books, a frequent columnist on the Borland Developer Network (, and a popular speaker at conferences, workshops, and training seminars around the world. Cary has a Ph.D. in Human Factors Psychology, specializing in human-computer interaction, from Rice University in Houston, Texas. You can contact Cary at


Many people at Codegear contributed their valuable time to comment on and contribute to this reviewer's guide. In particular, the author wishes to thank Michael Swindell, Malcolm Groves, Henrik Jondell, Bruneau Babet, Allen Bauer, Darren Kosinski, Chris Bensen, David Intersimone, John Kaster, and last, but not least, Jason Vokes, for their comments and input.

Made in Borland® Copyright © 2005 Jensen Data Systems, Inc. All rights reserved. All Borland brand and product names are trademarks or registered trademarks of Borland Software Corporation in the United States and other countries. Microsoft, Windows, and other Microsoft product names are trademarks or registered trademarks of Microsoft Corporation in the U.S. and other countries. All other marks are the property of their respective owners. Corporate Headquarters: 100 Enterprise Way, Scotts Valley, CA 95066-3249 • 831-431-1000 • • Offices in: Australia, Brazil, Canada, China, Czech Republic, Finland, France, Germany, Hong Kong, Hungary, India, Ireland, Italy, Japan, Korea, Mexico, the Netherlands, New Zealand, Russia, Singapore, Spain, Sweden, Taiwan, the United Kingdom, and the United States.

Published on: 11/28/2006 11:24:10 AM

Server Response from: ETNASC04

Copyright© 1994 - 2013 Embarcadero Technologies, Inc. All rights reserved.