You are previewing Borland C++Builder™ 6 Developer’s Guide.
O'Reilly logo
Borland C++Builder™ 6 Developer’s Guide

Book Description

C++Builder 6 Developer's Guide is revised for the latest version of C++Builder, the biggest update to C++Builder in years. C++Builder is an ANSI C++ IDE. The Version 6 adds BizSnap, a tool to build Web Services using XML/SOAP, .NET, and BizTalk from Microsoft, and SunONE from Sun Microsystems. Other new components include WebSnap for Web application development, DataSnap for database development, and CLX, which allows cross-platform development for Unix and Linux. The new NetCLX Internet components allow development of cross-platform applications with Apache, Microsoft IIS, and Netscape Web Server applications. C++Builder 6 Developer's Guide continues as the definite guide for Borland's C++Builder, providing a clear and concise reference for C++ Developers.

Table of Contents

  1. Copyright
    1. Dedication
  2. About the Author
  3. Acknowledgments
  4. We Want to Hear from You!
  5. Introduction
    1. Who Should Read This Book?
    2. How This Book Is Organized
    3. The Companion CD-ROM
    4. C++Builder System Requirements
    5. Conventions Used in This Book
  6. I. C++Builder Essentials
    1. 1. Introduction to C++Builder
      1. C++ Language
        1. ANSI Compliance
        2. Microsoft Compatibility
        3. Recommended Language References
        4. Borland Language Extensions and Standard Objects
          1. Properties
          2. Delphi-Style Default Properties
        5. try/finally
      2. The VCL, Forms, and Components
        1. The Form
        2. The Component Palette
        3. Events and Event Handlers
        4. Testing the Program
      3. Creating Your First Real Program
      4. Commonly Asked Questions
      5. What’s New in C++Builder 6?
        1. Compatibility with Previous Releases—Projects
        2. Compatibility with Previous Releases—Standard C++ Library
        3. Compatibility with Previous Releases—Database Program Changes
        4. Compatibility with Previous Releases—DsgnIntf Renamed and Split Up
        5. Other New Features
      6. Linux, Kylix, CLX, EJB, and C++Builder
        1. CLX Overview
        2. Cross-Platform Help System Integration
        3. Simplified IDL, IIOP, and EJB
      7. The C++ Standard Library
        1. Containers
        2. Memory Management
      8. Summary
    2. 2. C++Builder Projects and More on the IDE
      1. C++Builder IDE Features
        1. Main Window and Toolbars
        2. Project Manager
        3. Arranging Windows in the IDE
        4. Object Inspector
        5. Property Categories in the Object Inspector
          1. Using Property Categories
          2. Using the Predefined Property Categories
        6. The Object Tree View
        7. Source Code Editor
          1. The Diagram Tab
          2. Code Insight
        8. Forms—Save As Text
      2. Understanding C++Builder Projects
        1. Files Used in C++Builder Projects
          1. Main Project Files
            1. The C++Builder Project File
            2. The Main Project Source File
            3. The Project Resource File
          2. Form Files
          3. The Package Project Files
          4. The Desktop Layout
          5. Backup Files
        2. Project Manager
        3. Different Builds for Different Files
        4. Custom Build Tools
        5. Drag and Drop within Tree to Reorder Compilation
      3. Understanding and Using Packages
        1. Considerations When Using Packages
      4. Using the C++Builder Interactive Debugger
        1. Multithreaded Application Debugging
        2. Advanced Breakpoints
        3. Advanced Breakpoint Features
        4. C++Builder Debugging Views
          1. The CPU View
          2. The Call Stack View
          3. The Threads View
          4. The Modules View
          5. The FPU View
        5. Watches, Evaluating, and Modifying
        6. The Debug Inspector
      5. Advanced Debugging
        1. Locating the Source of Access Violations
        2. Attaching to a Running Process
        3. Using Just-In-Time Debugging
        4. Remote Debugging
          1. Configuring Remote Debugging
          2. Using Remote Debugging
        5. Debugging DLLs
      6. Speeding Up Compile Times
        1. Precompiled Headers
        2. Other Techniques for Speeding Up Compile Times
      7. Summary
    3. 3. Programming in C++Builder
      1. Better Programming Practices in C++Builder
        1. Use a String Class Instead of char*
        2. Understand References and Use Them Where Appropriate
        3. Avoid Using Global Variables
          1. Understand How C++Builder Uses Global Variables
        4. Understand and Use const in Your Code
        5. Be Familiar with the Principles of Exceptions
          1. The try Keyword
          2. The catch Keyword
          3. The __finally Keyword
          4. The throw Keyword
          5. Unhandled and Unexpected Exceptions
          6. Using Exceptions
          7. A Final Note on Exceptions
        6. Use new and delete to Manage Memory
        7. Understand and Use C++-Style Casts
        8. Know When to Use the Preprocessor
        9. Learn About and Use the C++ Standard Library
      2. VCL Overview
        1. It All Starts at TObject
        2. Building on Existing Objects
        3. Using the VCL
        4. The C++ Extensions
          1. The __automated Class Extension
          2. The __classid(class) Class Extension
          3. The __closure Class Extension
          4. The __declspec Class Extension
          5. __declspec(delphiclass, package)
          6. __declspec(delphireturn, package)
          7. __declspec(dynamic)
          8. __declspec(hidesbase)
          9. __declspec(hidesbase, dynamic)
          10. __declspec(package)
          11. __declspec(pascalimplementation)
          12. The __fastcall Keyword
          13. The __property Keyword
          14. The __published Keyword
        5. VCL and CLX
      3. Review of the Component Palette
      4. Creating User Interfaces
        1. Component Templates and Frames
          1. Component Templates
        2. Frames
          1. The TCustomFrame Class
          2. Working with Frames at Design Time
          3. Working with Frames at Runtime
          4. Creating a TFrame Descendant Class
          5. Practical Example: Using Frames to Create a Pop-Up Window
          6. Inheriting from a TFrame Descendant Class
          7. Reusing Frames
          8. Closing Remarks on Frames
        3. Coping with Different Screen Conditions
          1. Alignment
          2. Anchors
          3. Alignment, Anchors, Splitters, and Scroll Boxes
        4. Coping with Complexity in the Implementation of the User Interface
          1. Action Manager
          2. Standard Actions
        5. Enhancing Usability by Allowing Customization of the User Interface
          1. Docking
          2. Controlling Visibility
          3. Customizing the Client Area of an MDI Parent Form
        6. Working with Drag and Drop
        7. The Solution
        8. The Code
        9. How Does It Work?
        10. Wrapping Up Drag and Drop
      5. Nonvisual Components and Programming
      6. Creating Multithreaded Applications
        1. Understanding Multitasking
        2. Understanding Multithreading
        3. Creating a Thread Using API Calls
        4. Understanding the TThread Object
        5. Understanding the Main VCL Thread
        6. Establishing Priorities
        7. Timing Threads
        8. Synchronizing Threads
          1. Critical Sections
          2. Mutexes
          3. Others
      7. Summary
    4. 4. Creating Custom Components
      1. Creating, Compiling, and Installing Packages
        1. Packaging Components
        2. Compiling and Installing Packages
      2. Creating Custom Components
        1. Understanding Component Writing
          1. Why Build on an Existing Component?
          2. Designing Custom Components
          3. Using the VCL Chart
        2. Writing Nonvisual Components
          1. Properties
            1. NonPublished Properties
            2. Types of Properties
            3. Published Properties
            4. Array Properties
            5. Beyond Read and Write
            6. Order of Creation
          2. Events
            1. How to Create an Event That Contains Additional Parameters
          3. Methods
            1. Public Methods
            2. Protected Methods
          4. Creating Component Exceptions
          5. The namespace
          6. Responding to Messages
          7. Design Time Versus Runtime
          8. Linking Components
          9. Linking Events Between Components
        3. Writing Visual Components
          1. Where to Begin
          2. TCanvas
          3. Using Graphics in Components
          4. Responding to Mouse Messages
          5. Putting It All Together
          6. Modifying Windowed Components
        4. Creating Custom Data-Aware Components
          1. Making the Control Read-Only
          2. Establishing the Link
            1. Declare the Data Link
            2. Declare read and write Access
            3. Initialize the Data Link
          3. Using the OnDataChange Event
          4. Changing to a Data-Editing Control
            1. The ReadOnly Property
            2. Keyboard and Mouse Events
          5. Working Toward a Dataset Update
          6. Adding a Final Message
        5. Registering Components
      3. The Streaming Mechanism
        1. Advanced Streaming Requirements
        2. Streaming Unpublished Properties
      4. Distributing Components
        1. Where Distributed Files Should Be Placed
        2. Naming Packages and Package Units
        3. Naming Components
        4. Distributing Only a Design Time-Only Package
        5. Distributing Components for Different Versions of C++Builder
          1. Detecting the Compiler Version at Compile Time
          2. Using the ValidCtrCheck() Function
          3. The Use of Packages and C++Builder Version 1
          4. Using Sets in Components
        6. Creating Component Palette Bitmaps
        7. Using Guidelines in the Design of Components for Distribution
        8. Taking a Look at Other Distribution Issues
      5. Summary
    5. 5. Creating Property and Component Editors
      1. Creating Custom Property Editors
        1. The GetAttributes() Method
        2. The GetValue() Method
        3. The SetValue() Method
        4. The Edit() Method
        5. The GetValues() Method
        6. Using the TPropertyEditor Properties
        7. Considerations When Choosing a Suitable Property Editor
      2. Properties and Exceptions
      3. Registering Custom Property Editors
        1. Obtaining a TTypeInfo* (PTypeInfo) from an Existing Property and Class for a Non-VCL Type
        2. Obtaining a TTypeInfo* (PTypeInfo) for a Non-VCL Type by Manual Creation
        3. How to Obtain a TTypeInfo* for a Non-VCL Type
        4. Rules for Overriding Property Editors
      4. Using Images in Property Editors
        1. The ListMeasureWidth() Method
        2. The ListMeasureHeight() Method
        3. The ListDrawValue() Method
        4. The PropDrawValue() Method
        5. The PropDrawName() Method
      5. Creating Custom Component Editors
        1. The Edit() Method
        2. The EditProperty() Method
        3. The GetVerbCount() Method
        4. The GetVerb() Method
        5. The PrepareItem() Method
          1. Adding Custom Event Handlers to Context Menu Items
          2. Adding Submenu Items to Context Menu Items
        6. The ExecuteVerb() Method
        7. The Copy() Method
      6. Registering Component Editors
      7. Summary
  7. II. Database Programming
    1. 6. Borland Database Component Architecture
      1. Borland Database Component Types Overview
        1. Component Sets
      2. The Borland Database Engine
      3. BDE Single-Tier and dbGo
      4. BDE/SQL Links, IBExpress, dbExpress, and dbGo (Two-Tier)
      5. DataSnap Distributed Databases (Multitier)
      6. Summary
    2. 7. Database Programming
      1. What Are Data Modules?
      2. Why Use a Data Module?
      3. How to Use a Data Module in Applications, DLLs, and Distributed Objects
      4. What Goes in a Data Module?
      5. How to Add Properties to a Data Module?
      6. How to Use the Data Module Designer
        1. The Object Tree View and the Data Module Designer
      7. The Data Diagram Editor
      8. Advanced Concepts in Data Module Usage
        1. Form Inheritance with Data Modules
        2. Handling Uneven Form Inheritance with Data Modules
        3. How to Avoid Dependence on Specific User Interfaces
        4. How to Work with Application-Specific and Framework Components in Data Modules
        5. Data Modules in Packages
      9. Summary
    3. 8. The Borland Database Engine
      1. Introduction to the Borland Database Engine (BDE)
        1. Single-Tier
          1. Advantages
          2. Disadvantages
        2. BDE/SQL Links (Client/Server)
          1. Advantages
          2. Disadvantages
        3. ODBC Using the BDE
          1. Advantages
          2. Disadvantages
          3. Hedging Your Bets
      2. Component Overview
        1. Component Architecture
        2. Connection Components
        3. TTable—Non-SQL Dataset
          1. Adding and Editing Records in a TTable
          2. Transactions
          3. Master/Detail Tables
        4. TQuery—SQL Dataset
          1. TQuery Master/Detail
          2. Parameters in General
          3. Constructing a Query in Your Program
          4. UpdateSQL and RequestLive
          5. Cached Updates and TUpdateSQL
          6. Heterogeneous Joins
      3. Summary
    4. 9. Client Datasets and Client Dataset Enhancements
      1. Introduction to Client Dataset Concepts
      2. Using Basic Client Datasets in the Client/Server Environment
      3. Improving Performance with Client Datasets
      4. Using Client Datasets in a Multitier Environment
      5. Specialized Types of Client Datasets
      6. Summary
    5. 10. Interbase Express
      1. Introduction to IBExpress Components
      2. Setting Up a Schema
      3. Database Rules
      4. Generators, Triggers, and Stored Procedures
        1. Generators
        2. Triggers
        3. Stored Procedures
      5. Debugging an InterBase Application
      6. Database Creation and Connection
      7. Using Transactions
      8. Accessing Interbase
        1. TIBUpdateSQL
        2. TIBTable
        3. TIBQuery
        4. TIBDataSet
        5. TIBSQL and TIBStoredProc
        6. TIBEvents
      9. Setting Up Bug Tracker
        1. update, delete, insert, refresh
        2. Fields
        3. Cached Updates
        4. Transactions and Data-Aware Components
      10. Bug Tracker Wrap Up
      11. Summary
    6. 11. ADO Express Components for C++Builder
      1. ADO Versus BDE
        1. Hedging Your Bets
        2. Copying Records and Datasets
      2. Component Overview
        1. How Do They Fit into the VCL?
      3. Database Connections
        1. The TADOConnection Class
        2. The Provider
        3. The Connection String
        4. The Home of Transactions
        5. Accepting the Defaults
      4. Accessing Datasets
        1. Accessing a Dataset with TADOTable
        2. Setting the Connection for TADOTable
        3. Setting the Table Name for TADOTable
        4. Opening TADOTable
        5. Using a Data-Source and Data-Aware Controls with TADOTable
        6. Iterating Through the TADOTable
        7. Adding or Editing Records Through TADOTable
        8. Locating Specific Records in TADOTable
        9. Using Filters with TADOTable
        10. Accessing a Dataset with TADOQuery
        11. Running a Stored Procedure with TADOStoredProc
        12. Setting Up TADOStoredProc
        13. Executing TADOStoredProc
        14. Getting Results from TADOStoredProc
        15. Executing an Update with TADOCommand
        16. Setting Up TADOCommand
        17. Executing TADOCommand
        18. Using TADOCommand for Dataset Access
        19. Using TADODataset for Dataset Access
      5. Managing Transactions
      6. Using Component Events
        1. TADOConnection Events
        2. TADOCommand Events
        3. TADOCustomDataSet Descendant Events
      7. Creating Generic Database Applications
        1. Getting a Connection String from the User
        2. Getting Table Names
        3. Getting Field Names
        4. Getting Stored Procedure Names
      8. Performance Optimizations
        1. Query or Table
        2. Cursor Location
        3. Cursor Types
        4. Buffering
      9. Error Handling Issues
      10. Multitier Applications and ADO
      11. Summary
    7. 12. Data Access with dbExpress
      1. dbExpress
        1. Custom dbExpress
      2. dbExpress Components
        1. TSQLConnection
        2. TSQLDataSet
        3. Data-Aware Controls
        4. Why Unidirectional
        5. TSQLClientDataSet
        6. TSQLMonitor
      3. Migrating from Borland Database Engine (BDE)
        1. Migration Example
          1. Using BDE to Build an Application
          2. Using dbExpress to Build an Application
      4. Summary
    8. 13. XML Document Programming and XML Mapper
      1. XML Document Programming
        1. XML Document Properties
        2. XML Document Interfaces
        3. Reading XML Documents
        4. Writing XML Documents
      2. XML Data Binding
      3. XML Mapping Tool
        1. Transforming
        2. Transformation Demonstration
      4. Summary
  8. III. Windows Programming
    1. 14. Win32 API Functional Areas
      1. Win32 API Background
      2. Windows Management
        1. Windows Management Example
          1. Enumerating Windows
          2. Controlling External Windows
          3. Message Handling Support
          4. Flashing a Window
        2. Window Animation Effects
        3. Message Identifiers
        4. Responding to Windows Messages
      3. System Services
        1. System Services Example
          1. System Information
          2. Memory Information
          3. Drive Information
          4. File Information
        2. Spawning Applications and Discovering Window Handles
      4. Graphical Device Interface
        1. Shaping Your Applications
          1. CreateRoundRectRgn()
          2. CreateEllipticRgn()
          3. CombineRgn()
      5. Multimedia Services
        1. Multimedia File Playback
        2. Improved Accuracy with the Multimedia Timer
      6. Common Controls and Dialogs
        1. Common Controls
        2. Common Dialogs
      7. Shell Features
        1. Using ShellExecute() to Open a Browser
        2. Using ShellExecuteEx() to Spawn an Application
        3. Backing-Up Directories and Files
        4. Sending Files to the Recycle Bin
      8. International Features
      9. Network Services
        1. Getting Network Info
        2. Adding System Support
          1. Locking an NT Workstation
          2. System Shutdown
      10. Summary
    2. 15. Graphics and Multimedia Techniques
      1. The Graphical Device Interface (GDI)
        1. The Windows API and the Device Context
        2. Using TCanvas
          1. Key Properties
          2. Mixing TCanvas with the GDI
          3. Drawing Lines, Curves, and Other Shapes
          4. Drawing Filled Areas
          5. Drawing Text
        3. Using TPen
        4. Using TBrush
        5. Using TFont
        6. Using TColor
        7. An Analog Clock Example
      2. Working with Images
        1. The Windows Bitmap Object
        2. Understanding and Using TBitmap
          1. Essential TBitmap Operations
          2. Flicker-Free Bitmap Manipulation
          3. Rotating a Bitmap
          4. Cropping a Bitmap
        3. JPEG Images
          1. Loading a JPEG
          2. Saving an Image as a JPEG
          3. JPEG Performance Properties
          4. JPEG I/O Operations
        4. GIF Images
        5. PNG Images
      3. Working with Multimedia
        1. The Media Control Interface (MCI)
          1. Using Command Messages and Strings
          2. Decoding Error Constants
          3. Working with MCI Devices
          4. Retrieving the Status of a Device
          5. Polling a Device and MCI Notifications
          6. Concluding Remarks About the MCI
        2. The Waveform Audio Interface
          1. Opening and Closing Waveform Audio Files
          2. Working with Audio Streams
          3. Opening and Closing Waveform Audio Devices
        3. Concluding Remarks on the Waveform Audio Interface
      4. Summary
    3. 16. DLLs
      1. Creating a DLL Using C++Builder
        1. Using the DLL Wizard
        2. Filling in DLL Code
        3. Adding a DLL Header File
        4. Building a DLL
      2. Loading a DLL
        1. Linking DLLs Statically
        2. Loading DLLs Dynamically
      3. Exporting and Using DLL Classes
      4. Packages Versus DLLs
        1. Steps for Creating a Package
      5. Using Forms in a DLL
        1. Modal SDI Windows
        2. MDI Child Windows
      6. Shared Memory Support in a DLL
      7. Using Microsoft Visual C++ DLLs with C++Builder
      8. Using C++Builder DLLs with Microsoft Visual C++
      9. Summary
    4. 17. COM Programming
      1. COM Fundamentals
        1. COM Architectural Elements
        2. COM Technologies
      2. Creating and Using COM Interfaces
        1. IUnknown
        2. Interface ID
        3. Type Libraries
        4. Creating an Interface in C++Builder
        5. Implementing an Interface in C++Builder
        6. Accessing a COM Object
        7. Importing a Type Library
      3. Adding Automation
        1. Adding Automation to an Existing Application
        2. Creating an Automation Controller
      4. Adding Event Sinks
      5. Writing the COM Server
        1. Implementing Event Sinks within a Client
      6. ActiveX Controls
      7. Recommended Resources
        1. Bibliography
        2. Bibliography
        3. Bibliography
        4. Bibliography
      8. Summary
  9. IV. Distributed Computing
    1. 18. DCOM: Going Distributed
      1. What Is DCOM?
        1. Windows OS Family and DCOM
      2. The DCOMCnfg Utility Tool
        1. Global Security Settings
        2. Per-Server Security Settings
      3. Field Testing DCOM
        1. Creating the Server Application
        2. Creating the Client Application
        3. Configuring Launch and Access Permissions
        4. Configuring Identity
        5. Running the Example
      4. Programming Security
        1. CoInitializeSecurity Function Parameters
        2. Using CoInitializeSecurity
        3. Understanding DLL Clients and Security
        4. Implementing Programmatic Access Control
        5. Implementing Interface-Wide Security
          1. IClientSecurity Interface
          2. IServerSecurity Interface
        6. Using the Blanket
      5. Summary
    2. 19. SOAP and Web Services with BizSnap
      1. Building Web Services
        1. SOAP Server Application
        2. SOAP Server Web Module
          1. Server Activation Model
          2. Invokable Registry
        3. Web Service Interface
        4. Deploying the SOAP Server
      2. Consuming Web Services
        1. WSDL Importer
        2. Using ICmInch
          1. Without HTTPRIO
      3. Using Other Web Services
        1. Google Web APIs
        2. Google Search Key
        3. Google Search
          1. doGoogleSearch
          2. GoogleSearchResult
      4. Summary
    3. 20. Distributed Applications with DataSnap
      1. Introduction to DataSnap
      2. DataSnap Clients and Servers
        1. Creating a Simple DataSnap Server
        2. DataSnap Server Registration
        3. Creating a DataSnap Client
        4. Using the Briefcase Model
        5. Using ApplyUpdates
        6. Implementing Error Handling
        7. Demonstrating Reconcile Errors
        8. Creating a DataSnap Master-Detail Server
        9. Exporting Master-Detail DataSets
        10. Creating a DataSnap Master-Detail Client
        11. Using Nested Tables
        12. Understanding DataSnap Bandwidth Bottlenecks
          1. Minimizing Bottlenecks Using PacketRecords
          2. Minimizing Bottlenecks Using Server Optimization
      3. Stateless DataSnap
        1. Stateful Versus Stateless DataSnap Servers
      4. Deployment
      5. Summary
    4. 21. DataSnap Multitier Connections
      1. Accessing the Server Remotely Using DCOM
      2. HTTP WebConnection
        1. Object Pooling
      3. TCP/IP SocketConnection
        1. Registered Servers
        2. Object Broker
      4. New DataSnap Connections
        1. TLocalConnection
          1. BDE “legacy” Application
          2. Preparing to Upgrade
          3. ApplyUpdates
        2. TConnectionBroker
          1. DataSnap BDE Server
          2. DataSnap Client
          3. Switching Connections
      5. TSOAPConnection
        1. C++Builder 6 Enterprise Soap Server
        2. C++Builder 6 Enterprise SOAP Client
      6. Summary
    5. 22. Web Server Programming with WebSnap
      1. WebAppDebugger
        1. Default Web Action Item
        2. Debugging
        3. Debug Web Server Application
      2. WebSnap Demo
        1. WebSnap Components
        2. WebSnap Web Module
        3. WebSnap Data Module
        4. DataSetAdapter
        5. WebSnap Page Module
        6. Deployment
        7. Tweaking
      3. WebSnap Architecture
        1. Actions Versus Pages
        2. WebSnap Web Modules
          1. TWebAppDataModule Versus TWebAppPageModule
        3. WebSnap Page Modules
        4. WebSnap Data Modules
        5. WebSnap Versus WebBroker
        6. Server Side Scripting
        7. WebSnap Adapters
          1. Adapters
            1. Adapter Fields
            2. Adapter Actions
          2. TAdapter
          3. TPagedAdapter
          4. TDataSetAdapter
          5. TLoginFormAdapter
          6. TApplicationAdapter
          7. TEndUserAdapter
          8. TEndUserSessionAdapter
          9. Custom Adapter Components
        8. WebSnap Producers
          1. TAdapterPageProducer
      4. WebSnap Login
        1. WebSnap Application
        2. WebSnap Page Module
        3. WebUserList
        4. Login Page Module
        5. LoginFormAdapter
        6. Login Form
        7. Incorrect Login
        8. EndUserSessionAdapter
      5. WebSnap Sessions
        1. TSessionsService
          1. TAdapter Fields
          2. TAdapterPageProducer
          3. TAdapter Actions
          4. TSessionsService
      6. WebSnap Master-Detail Example
        1. Primary Key
        2. DataSetAdapter
        3. WebSnap Page Module
        4. Linking Pages by Name
        5. Tweaking and Turning
        6. Final Deployment
      7. Summary
  10. V. Open Tools API
    1. 23. The Tools API: Extending the Borland IDE
      1. Tools API Fundamentals
        1. Open Tools API (OTA)
        2. Native Tools API (NTA)
        3. Tools API Capabilities
      2. Creating a Wizard
        1. Selecting a Wizard Interface
        2. Reconstructing TNotifierObject for C++Builder
        3. Defining a Custom Wizard Class
        4. Registering a Wizard Class
        5. The End Result
      3. Creating and Using Services
        1. Selecting a Service Interface
        2. Accessing a Service
        3. Utilizing a Service
          1. Look Before You Leap with ProcessMessages()
          2. Providing Feedback Through the IDE Message View
          3. Locating and Building the Active Project
          4. Hacking into the IDE Responsibly
          5. Additional Processing with Services
      4. Creating and Using Notifiers
        1. Defining a Custom Debugger Notifier Class
        2. Utilizing Our Debugger Notifier
      5. Creating and Using Creators
        1. Defining a Custom Creator Class
        2. Utilizing Our Creator
      6. Using Editors
      7. Debugging Your IDE Extensions
      8. Building and Deploying DLLs
      9. Recommended Readings
        1. Bibliography
      10. Summary
  11. VI. Appendixes
    1. A. C++Builder Example Applications
      1. Overview of C++Builder Example Applications
      2. “Apps” Example Applications
      3. ”DBTask” Example Applications
      4. ”Doc” Example Applications
      5. ”WebSnap” Example Applications
      6. Summary
    2. B. C++ Mobile Application Development
      1. C++ Mobile Edition Overview
        1. Symbian SDK
        2. C++ Mobile Edition Plug-In
        3. Emulator Versus Simulator
      2. Creating a Mobile Application
        1. Loading the Hello World Example
        2. Building a Mobile Application
        3. Testing the Application
      3. Mobile Project Composition
        1. MMP Files
        2. BLD.INF File
        3. Source Code Files
          1. Header File
          2. Source Files
          3. Resource File
          4. Additional Files
      4. Deploying a Mobile Application
        1. PKG and SIS Files
        2. Tools and Methods
      5. Symbian OS
      6. Future Borland C++ Mobile Products
        1. Borland ARM C++ Compiler
        2. Mobile CLX Framework
      7. Additional Resources
      8. Summary
    3. C. Information Resources
      1. Borland-Sponsored Web Sites
        1. Borland Home Page
        2. Borland Developer Network
        3. CodeCentral
        4. QualityCentral
      2. Useful Developer Web Sites
        1. C++Builder Sites
        2. C++ Resources
        3. Components and Tools
        4. Web Services
        5. Windows Technologies
      3. Newsgroups
      4. Books and Magazines
        1. C++Builder Books
          1. Bibliography
          2. Bibliography
        2. General C++ Books
          1. Bibliography
        3. Magazines
          1. Bibliography
      5. The Borland Developers Conference (BorCon)
      6. Summary
    4. D. Enabling TXMLDocument for C++Builder Professional
      1. TXMLDocument VCL Registration Support
      2. TXMLDocument VCL Package Assembly
      3. Using TXMLDocument
      4. Summary