1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu C++Builder™ 6 ppt

529 752 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề C++Builder™ 6 Developer’s Guide
Tác giả Satya Sai Kolachina
Người hướng dẫn Karen Giles at Borland Developer Relations
Trường học Wordware Publishing, Inc.
Chuyên ngành Software Development, Programming
Thể loại Sách hướng dẫn phát triển phần mềm
Năm xuất bản 2003
Thành phố Plano
Định dạng
Số trang 529
Dung lượng 4,62 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

You will findtopics on familiarizing yourself and navigating with the tool, new featuresadded to the current release C++Builder 6 compared to the previousrelease, creating projects, type

Trang 2

Developer’s Guide

Satya Sai Kolachina

Wordware Publishing, Inc.

Trang 3

© 2003, Wordware Publishing, Inc.

All Rights Reserved

2320 Los Rios Boulevard Plano, Texas 75074

No part of this book may be reproduced in any form or by

any means without permission in writing from

Wordware Publishing, Inc.

Printed in the United States of America

All inquiries for volume purchases of this book should be addressed to Wordware Publishing, Inc., at the above address Telephone inquiries may be made by calling:

(972) 423-0090

Trang 4

It is my pleasure and responsibility to dedicate this book to a few peoplewithout who I am incomplete in several aspects.

First of all, I mention my father, Sri Venkata Lakshmana Murthy

Kolachina, and mother, the late Srimathi Kamala Devi Kolachina, whogave me this invaluable life, taught me human values, and with whoseblessings, efforts, and encouragement I am now what they envisioned Ishould be

Next I mention Sri Vinai Bhushan VR Kanteti and his wife, SrimathiSwarajya Lakshmi Kanteti, who gave me a career and laid the foundationstone for my social status today

There is a saying “Behind every successful man is a woman.” It is alsosaid that without a wife’s cooperation, the husband is only an incompleteperson These words are very much true in my case, since my wife,

Parvathi Devi Kolachina, has provided me encouragement and full ation at every step in my life, career, and even while writing this book Iexpress my gratitude to her whole-heartedly

cooper-I am very proud of my children, Kamala Priyadarsini Kolachina andSatya Shilpa Kolachina, who always regarded their dad as a great personand always extended their love, affection, and cooperation, though I am avery normal person like millions of others in this world

I next thank very much the reviewers, Damon Chandler and Thomas J.Theobald, who gave me their valuable suggestions to better present mythoughts I also thank my close friends and relatives who provided meencouragement

I thank Wordware Publishing and its staff for extending me their fullcooperation throughout the process

I am very thankful to Karen Giles at Borland Developer Relations, whoprovided me with the C++Builder 6 software and encouraged me to writethis book

I am a true believer that every human being is a representation of God.Therefore, I thank the creator of this universe who provided me so manywell-wishers and a continuous flow of thoughts to keep my commitment tothe publisher and to the reader community

iii

Trang 6

Introduction xiii

Part I Windows and Database Development Chapter 1 Introduction to C++Builder 6 3

Introduction 3

C++Builder 6 Overview 3

The Main Window and Toolbars 3

Component Palette 4

Object Inspector 5

Object TreeView 7

To-Do List 7

Alignment Palette 8

New Features 9

Technology Additions 9

WebSnap and Enhancements to Internet Development 9

BizSnap 11

Enhancements 11

Enhancement to DataSnap 11

New Database Support 11

STLPort Standard Template Library 11

New Components and Wizards 12

Working with Projects 13

What Constitutes a C++Builder 6 Project? 13

Setting Project Options 14

Borland Packages and Components 15

Installing Third-Party Vendor Components 16

Types of Projects That C++Builder 6 Supports 17

Building User Interfaces 18

Your First Windows Application 19

Summary 22

Chapter 2 C++ Advanced Concepts 23

Introduction 23

Language Overview 24

v

Trang 7

C++ Features That are Often Ignored 26

Templates 26

What are Templates? 26

When to Use Templates 26

Namespaces 29

Casting in C++ 32

dynamic_cast 32

static_cast 34

const_cast 34

reinterpret_cast 35

Exception Handling 35

A Word about Pointers 37

References 40

Virtual Methods 42

C++ Language and C++Builder 45

Overview 45

Keyword Extensions 47

classid 47

closure 47

property 49

published 50

declspec 50

interface 52

Object Construction Sequence in C++Builder 53

Summary 56

Chapter 3 The VCL Explored 57

Brief Introduction to VCL Architecture 57

VCL Objects 60

AnsiString 62

What is TObject? 63

Persistence of Objects—TPersistent Class 65

Basic VCL Component—TComponent Class 65

Non-Visual Components 66

Visual Components—TControl and TWinControl Classes and Their Descendants 66

The Application—Global TApplication Instance 67

Properties, Methods, and Events of TApplication 69

Other Global Variables—TScreen, TMouse, and TClipboard Instances 73

Getting the RTTI 79

Is a Specific Property Published for the Object? 79

What is the Property Type? 79

Is a Specific Property in an Object of a Specific Type? 80

vi

Trang 8

What is the Type of a Specific Property in an Object? 80

Is the Property Stored in the DFM File? 80

Getting and Setting Property Values for an Object 80

A Closer Look at Forms 82

Creating Forms in a DLL 84

What are a Form’s Characteristics? 90

Frames in the VCL 92

Using Frames in a Project 93

The Value List Editor 95

Summary 97

Chapter 4 Advanced VCL Features 99

Introduction 99

Actions and ActionLists 99

Action Clients 100

Action Objects and TAction Class 101

Types of Action Objects 101

Action Targets 101

ActionList Object 102

Using the Standard Action Objects 102

How Does the Application Find the Action Target for an Action Object? 105

Using the Custom Action Objects 105

How Does VCL Identify the Appropriate Action Handler for an Action? 107

Visual Components That Render Action Objects 110

Windows Common Dialogs 118

Windows Drag and Drop 120

Properties and Methods of the Source Object 120

BeginDrag() Method 120

OnMouseDown() Event 121

Event Handlers for the Drop Target 121

Custom Drag Objects 122

Drag and Drop Across Modules in an Application 128

Date/Time Management 133

TDateTime Class 133

What is DOS File Timestamp? 137

Win32 Core Date-Time Management 138

Formatting Date-Time Strings 139

Constants Defined in SYSUTILS 140

Directory and File Management 141

Working with Directories 141

Working with Files 144

Functions That Work with File Existence and Search 144

vii

Trang 9

WIN32_FIND_DATA Structure 145

File Attributes 146

Setting the Advanced Attributes 147

Filename Manipulation Functions 149

File Content Management 151

Summary 152

Chapter 5 Simple Database Development 153

Introduction to Database Development 153

Two-tier, Three-tier, and Multi-tier Applications 154

VCL Architecture for Database Development 156

Database Connection Components 157

Database Connection Frameworks Supported in VCL 157

How Do You Connect to a Database? 160

What is TDataSet? 161

Dataset States 163

Synchronous and Asynchronous Modes 164

Properties, Methods, and Events 165

Data-aware Controls and DataSource 169

Data Module—The Non-visual Container 170

Borland Database Engine (BDE) Framework 170

BDE Components 170

Setting Up a BDE Alias for InterBase SQL Links Driver 171 Setting Up a BDE Alias for MS Access ODBC Driver 173

Sample Application Using BDE Framework 175

Creating BDE Components Programmatically 181

ActiveX Data Objects (ADO) Framework—dbGo 183

Microsoft ADO Components 183

Simplified Borland ADO Components 183

How Do We Make a Database Connection? 183

Obtaining Metadata from the Database 186

What Dataset Objects are Available in the ADO Framework? 189

The TADOCommand Component 192

Sample Application Using ADO Components 193

Summary 198

Chapter 6 Advanced Database Development 199

Introduction 199

Data Access Components 200

What is TClientDataSet? 200

TClientDataSet as an In-memory Table 201

Creating a ClientDataSet on a Form 201

Programmatically Creating a ClientDataSet 203

viii

Trang 10

TDataSetProvider in Advanced Database Development 207

The TDataSetProvider-TClientDataSet Duo 208

Properties, Methods, and Events of TClientDataSet 210

Properties, Methods, and Events of TDataSetProvider 216

Methods Supported by IProviderSupport Interface 218

The TDataSource Component 221

XML-based Data Access Components 221

Borland dbExpress Architecture 222

Overview 222

dbExpress Components 222

Configuring a dbExpress Connection 223

Using Unidirectional Datasets with Data-aware Controls 225

Through TSQLClientDataSet 225

Through TClientDataSet and TDataSetProvider 230

Using Unidirectional Datasets without Data Controls 235

Borland InterBase Express for InterBase 236

Overview 236

IBX Components 237

TIBDatabase, TIBDatabaseInfo, and TIBTransaction 237

A Word about Transaction Isolation Levels 241

Datasets in the IBX Family 242

Executing Stored Procedures That Return a Result Set 245

Updating a Read-only Dataset 246

TIBClientDataSet at a Glance 250

Summary 251

Part II Advanced and Distributed Application Development Chapter 7 Building WebBroker Applications 255

Introduction 255

Uniform Resource Identifiers (URIs) 256

Overview 256

Parts of a URL 256

The HTTP Protocol 257

The HTTP Methods 258

The HTTP Request 259

The HTTP Response 262

The HTTP Response Status Codes 262

Web Development in C++Builder 6 263

Overview 263

A Typical Web Application 265

Web Dispatcher in Action 274

Sample Web Applications 275

ix

Trang 11

Overview 275

CGI Application 276

Convert the CGI Application to ISAPI DLL 282

Apache Application 285

Producer Components 290

Overview 290

PageProducer Components 290

TableProducer Components 292

Summary 303

Chapter 8 Building WebSnap Applications 305

Introduction 305

WebSnap Components at a Glance 306

Overview 306

Web Page Modules 307

Web Data Modules 309

Adapter Components 309

What are Adapters? 309

Types of Adapters 312

Content Producers 314

The IPageDispatcher Interface 314

Server-side Scripting 315

Overview of the Scripting Language 319

VCL Script Objects 321

The Page Object 326

The Module Object 327

Other Objects 327

Building WebSnap Applications 328

WebSnap Application Wizards 328

A Simple WebSnap Application 332

An Improved Way to Save the State Information 338

A WebSnap Application Connecting to a DataSource 339

Summary 346

Chapter 9 Developing DataSnap Applications 347

Introduction 347

DataSnap Applications 347

Connecting to the Remote Application Server 348

What is Contained in the DataSnap Server Module? 350

The IAppServer Interface 354

The Threading Model of Server Objects 357

DataSnap Application Logic Flow 359

Sample DataSnap Application 361

Connecting to the Server through DCOM 368

x

Trang 12

TInetXPageProducer Component 374

A Word on the XML-based Provider 378

Summary 382

Chapter 10 Developing Distributed Applications (CORBA and TCP/IP) 385

Introduction 385

CORBA Overview 386

The CORBA Object Model 387

The Interface Definition Language 388

IDL to CPP Translation 390

The Stub File Classes 390

The Skeleton Classes 392

The CORBA Server Application 393

The CORBA Client Application 399

The Portable Object Adapter 402

The Interface Repository 407

The Object Activation Daemon (OAD) 408

The Naming Service 408

Simple TCP/IP Applications 409

Simple TCP/IP Protocol 409

Blocking and Non-blocking Connections 412

How Do Clients Establish a Connection with the Server? 412

Custom App Server Model 414

A Simple FTP Client 422

Summary 427

Chapter 11 Building BizSnap Applications (XML and Web Services) 429

Introduction 429

XML Overview 430

XML Documents 431

The Document Object Model 432

XML Namespaces 435

XML Schemas 436

What is TXMLDocument? 436

SOAP Overview 440

Web Services 442

Building and Using Web Services in C++Builder 6 442

Building SOAP Server Applications 443

Building SOAP Client Applications 451

SOAP-based Multi-tier Distributed Applications 454

xi

Trang 13

Building the Server Module 455

Summary 460

Chapter 12 Miscellaneous and Advanced Topics 461

Introduction 461

The Cross-platform Component Library 461

What does BaseCLX Contain? 464

INI Files and Windows Registry 464

Non-visual Containers 468

TStrings and TStringList 468

TList and TObjectList 471

Streams and Streaming 472

Graphics at a Glance 475

TCanvas 476

Visual Container Components (in VisualCLX) 477

TListBox 477

TListView 477

Custom Component Development 478

Implementing Component Properties and Methods 480

Implementing Component Events 482

Overriding Default Event Behavior 484

Registering the Components 486

Miscellaneous Programming Features 487

Variant and OleVariant 487

Using Office 2000 Automation Objects 492

The TOleContainer Component 493

Summary 497

Index 499

xii

Trang 14

My desire to write a book about C++Builder has some history I have beenvery impressed with Borland since their first edition of C++ (and prior edi-tions of C), because they have always made an effort to ensure quality.Unfortunately, there are very few books on the market about Borland C++

or C++Builder, compared to other products like Visual Basic or VisualC++ Since different authors have different viewpoints of a product, Ialways prefer to consult more than one book to gain in-depth knowledge, asevery author provides a unique service with his or her expertise Also,authors are limited by their own constraints; every book does not coverevery aspect of the product When I first used MIDAS a few years ago,there was not a book available to help me do my project I spent a lot oftime investigating answers for my questions in an iterative manner I cansay that my frustration over that prompted me to write this book on

C++Builder

As with every release, C++Builder 6 is very rich with features Best ofall, you can build distributed objects in different technologies in the realRAD (rapid application development) way To my knowledge, this is theonly C++ implementation that enables you to build C++ applications on thefly, just as easy as with Delphi or Visual Basic For programmers who areapprehensive of C++, I would recommend learning C++ using this product

I paid exclusive attention to three main subject areas of C++Builder 6: dows application development, database development, and distributedsystems development Throughout the duration of this project, I attempted

Win-to make the book useful for every type of reader—a novice in C++Builder,

a programmer experienced with the product, and those who already havebooks on prior editions of C++Builder The entire book contains 12 chap-ters Some chapters are relatively larger than we normally see in manybooks To keep the flow of my thoughts continuous (which is very helpfulfor the reader), I did not want to break the chapters into smaller pieces Idivided the 12 chapters into two parts The first part presents topics on Win-dows application development as well as database development Thesecond part is dedicated to distributed systems development and a few mis-cellaneous topics Thus, I present more than 200+ pages on several

xiii

Trang 15

distributed architectures, including DataSnap, WebBroker, WebSnap,BizSnap, CORBA, and TCP/IP I also created a number of example pro-jects, which you may directly compile on your computer, either for learning

or for use in your own projects Most of the source code for the examples ispresented in the book and provided on the companion CD However, youmay need to have the Enterprise edition of C++Builder 6 to work on most

of the second part of the book, since it covers advanced topics

For a couple of reasons, I did not present COM/ActiveX-related chapters

in this book The main reason is that almost all the available books onC++Builder present topics on COM-related technologies very well In addi-tion, Microsoft itself is drifting its focus away from COM-related

technologies since they released the NET framework, which would forcemany organizations to reduce the intensity of their COM-based applicationdevelopment Slowly, many organizations will migrate their COM-basedsolutions to NET or other distributed architectures

Chapter Overview

As mentioned earlier, the 12 chapters in this book are divided into twoparts The first part contains chapters on topics related to Windows applica-tion development and database development The second part containschapters on topics related to the development of distributed objects andapplications Extensive sample applications are provided throughout thebook, in all the chapters, for different programming scenarios Let me nowpresent an overview of each of the chapters to familiarize you with the con-tents of the book

Chapter 1 serves as an introduction to programming in C++Builder 6

and an introduction to Windows programming with this tool You will findtopics on familiarizing yourself (and navigating) with the tool, new featuresadded to the current release (C++Builder 6) compared to the previousrelease, creating projects, types of applications that can be created with thetool, compiling the projects, setting project options, installing third-partycomponents onto the Component Palette, and creating simple Windowsapplications The chapter is mainly focused on providing considerableintroduction for professionals who are considering C++Builder 6 as theirdevelopment platform

In Chapter 2, I focus my attention on some advanced C++

program-ming concepts, such as templates, namespaces, casting, exception handling,pointers, references, virtual methods, C++Builder keyword extensions tothe C++ language, and object construction sequence in a typical class hier-archy I do not teach the C++ language itself, but I do discuss the

xiv

Trang 16

importance of these advanced features in building efficient and prise-class applications.

enter-In Chapter 3, I present an in-depth discussion on the Visual Component

Library (VCL), which provides a rich set of components and run-time tines to the developer It is the VCL that makes C++Builder a distinctplatform from its competition and also adds strength to the core C++ lan-guage The chapter presents VCL’s features, including the componentarchitecture, object persistence, visual and non-visual components, interact-ing with the VCL Application object and the system resources, such as thescreen, mouse, and clipboard, an in-depth discussion on the run-time typeinformation, the VCL forms and frames, and more The chapter is aimed atproviding strong fundamentals in the VCL architecture and forms a founda-tion for the following chapters

rou-Chapter 4 is aimed at providing advanced VCL programming techniques The enhanced features on Action Objects, action lists, and actionmanager enable you to design action-based applications that automate yourtask and minimize the programming need, since actions incorporate most ofthe coding within themselves Windows drag and drop is another advancedfeature discussed at length with full working projects Then date and timemanagement and file and directory management are discussed in greatdetail Chapters 3 and 4 together are designed to raise your comfort level inbuilding Windows applications using the VCL

-Chapter 5 introduces the concepts of database programming, VCL’s

architecture that supports database development, the different databasearchitectures supported by VCL, data modules as containers of databasecomponents, the Borland Database Engine (BDE), and the ADO compo-nent set to connect to databases using Microsoft’s ADO/OLE DB

technology

Chapter 6 provides advanced database development techniques In this

chapter, I discuss the new dbExpress framework from Borland, concepts ofunidirectional datasets, and the IBExpress component set to connect toInterBase databases I also present the data access components, clientdataset, dataset provider, and basics required for building client-serverapplications The discussion in this chapter forms a basis for future topics

on distributed object development

Chapter 7 marks the beginning of the second part, which is dedicated to

a great extent to distributed object development However, this chaptercompletely focuses on WebBroker application development, an overview ofthe HTTP protocol, building web applications using Borland’s traditionalWebBroker architecture, and different types of web applications including

xv

Trang 17

Apache web modules I also present an in-depth discussion on the producerand dispatcher components.

In Chapter 8, I focus completely on Borland’s new WebSnap

architec-ture for building web applications The topics in this chapter include webpage modules, web data modules, adapter components, content producers,

an overview of server-side scripting, and VCL script objects

Chapter 9 is aimed at developing DataSnap applications The topics discussed in this chapter include what constitutes a DataSnap server module,IAppServer—the interface implemented by a typical remote server module,the threading model implemented by a server module, different ways a cli-ent can connect to the remote server, and implementing a web-based client

-to a DataSnap server

Chapter 10 presents you with the distribution object development using

the CORBA framework The CORBA object model is discussed at lengthand includes the Basic Object Adapter (BOA), the Portable Object Adapter(POA), and other constituents of the framework Though most of the dis-cussion is generic in nature, Borland’s VisiBroker is the base CORBAimplementation to demonstrate the process with examples The chapter alsopresents a detailed discussion on the development of a custom client-servermodel using simple TCP/IP sockets and finally presents a sample customFTP client application

Chapter 11 focuses on the BizSnap architecture introduced by Borland

to implement SOAP-based web services Initially, I present an overview ofXML terminology and concepts of web services, and then I discuss the pro-cess of building web service (server) modules and web service clients usingC++Builder You will notice that, as with any other technology, C++Buildermakes it very simple to build web services I also discuss Borland’s exten-sion of the SOAP objects to DataSnap, thus creating SOAP-based

DataSnap server modules This is a very cool approach to web-enable yourcurrent DataSnap applications as web services

Chapter 12, the last chapter in the book, provides a discussion on some

miscellaneous and advanced topics In this, chapter I present three maintopics, including an overview of the Borland CLX (Component Library forCross-platform development) introduced in C++Builder 6, which enablesporting your Windows-based applications to Linux without pain It includesBaseCLX, which is common mostly across VCL and CLX frameworks Ialso present custom component development concepts and OLE objects andOLE containers

xvi

Trang 18

Windows and Database

Development

Trang 20

C++Builder 6 Overview

In this section, I will mostly go through the Integrated Development ronment (IDE) and other features useful in the application developmentprocess If you are already a user of the product and familiar with these top-ics, you may skip this section and jump directly to the section titled “NewFeatures.”

Envi-The Main Window and Toolbars

Figure 1-1 shows the default menu bars and toolbars that appear in the mainwindow when you start C++Builder The individual toolbars are docked tothe main window, and may be undocked if you desire The toolbars providequick access to certain frequently used menu items The Component Palette

is also docked to the main window in the default style Figures 1-2 through1-5 display the Standard, View, Debug, and Desktop toolbars, respectively.The Help toolbar is also docked to the main window; it contains only onebutton, which opens the online help manual

3

Trang 21

The Standard toolbar contains shortcut

but-tons for operations such as creating new

projects or project items, opening existing

projects or files, adding files to the project,

removing files from the project, and saving

project files

The View toolbar contains shortcut

but-tons for operations such as viewing the

forms or units in a project, adding new

forms to the current project, and toggling

the view between a form and its

corre-sponding unit

The Debug toolbar contains shortcut

but-tons used while debugging your application

The Desktop toolbar may be used to save

your current desktop settings (specific to

C++Builder IDE) with a name This is

help-ful for saving multiple desktop settings for future use

Component Palette

The Component Palette is a container that holds all the components tered with the IDE The components are arranged in different pages.C++Builder 6 comes in different editions, which dictate the set of compo-nents packaged with that edition The Enterprise Edition is the highest leveledition and contains all the components built with the system Check withBorland about the components included in the specific edition you have.Components provide easy access to manage the objects from the IDE.Components may be visual and non-visual In simple terms, visual compo-nents are those that participate in the visual presentation of your applicationand are visible during run time Non-visual components do not participate

regis-in the visual presentation of your application; rather, they provide services

in the background mode But since they are components and available inthe Component Palette, you can access them during application design.Once you compile your application and start executing, the components’services are accessible only through your program, and they are not visible

Figure 1-2: The Standard toolbar

Figure 1-3: The View toolbar

Figure 1-4: The Debug toolbar

Figure 1-5: The Desktop toolbar Figure 1-1: The main window in default style

Trang 22

for user interaction or display When you create your own components or

buy components from third-party vendors, you may install them on the

Component Palette, and they behave very naturally like the components

supplied by Borland Figure 1-6 displays the Component Palette with the

default pages A left and right arrow pair is provided at the top-right corner

of the Component Palette to switch to pages that are not visible since the

viewable size of the Component Palette is limited, particularly when you

install a number of third-party components

cre-simple view of the Object Inspector

The Object Inspector has two tabbed pages

and a combo box above these pages The names

of all the objects placed on the forms (including

the forms) are listed in the combo box, and by

selecting the appropriate object, its current

prop-erty settings are displayed in the Object

Inspector The Properties page displays

proper-ties of the object, and the Events page displays

available events for the object When you choose

a different object from the object list, the

proper-ties and the list of events change immediately to

those corresponding to the selected object The

Object Inspector displays only the published

properties of the components Properties that

should be allowed to be set during design time

are published when building the components

If a specific editor is required to set a

particu-lar property of an object, the appropriate editor is

invoked automatically when you click the ellipsis button next to the

Figure 1-6: The Component Palette

Figure 1-7: The Object Inspector

Trang 23

property edit box For some types of components, the component writerswrite special property editors For example, the SQL property of a databasequery component requires that you enter multiple lines of query, since aquery string constitutes a string list object In such a case, when you clickthe ellipsis button in the corresponding edit box, or double-click in the editbox, the String List Editor associated with the SQL property is displayed, asshown in Figure 1-8.

When you switch to the Events page of the Object Inspector, you can createempty event handlers in the program file corresponding to the form thatcontains the object by double-clicking in the edit box next to the specificevent for which you wish to create the event handler Event handlers ofobjects are public methods in the associated form class file and provide anice encapsulation of the objects within the form by exposing these eventhandlers (and other public methods you manually create) to the (current)application or an external application that can access this form if the form isembedded within a DLL Most of the time, you don’t have to invoke theevent handlers yourself They are automatically executed when the specificevent is fired by the system or by the component itself But, if your applica-tion design requires it, there are occasions that may demand manual

invocation of an event handler

Figure 1-8: The Object Inspector with a property editor

Trang 24

Object TreeView

The Object TreeView provides another view of the objects placed on the

forms While the Object Inspector displays properties of a specific object,the Object TreeView displays the objects on the form in a hierarchical style.When you choose an object in the Object TreeView, its properties are dis-played in the Object Inspector automatically Some components behave likecontainers of other components In the Object

TreeView, you can reassign objects from one

container to another, such as moving objects like

buttons or list boxes from the form to a panel or

group box, which is also placed on the form

itself Figure 1-9 displays the Object TreeView

and Figure 1-10 displays the default IDE with

the main menu, Object Inspector, Object

TreeView, Component Palette, and the toolbars

docked to the main window The figure also

dis-plays the main form for the default project

Figure 1-9: The Object TreeView

Figure 1-10: The IDE with a default project

Trang 25

To-Do List window is displayed You can add, edit, and delete items on thelist The pop-up menu showing the tasks you can do with the to-do list isdisplayed when you click the right mouse button while the mouse pointer isplaced on the to-do list view The to-do list view and the pop-up menu aredisplayed in Figure 1-11 When you click the Add menu option from thepop-up menu, another dialog is displayed, which lets you add items to thelist, as shown in Figure 1-12 You can assign names of individuals to tasks,prioritize the tasks, and also categorize them based on some criteria, such asproject development phase, team name, and so on.

Alignment Palette

When components are placed, you may need to align them according tocertain criteria, such as aligning a group of components along their leftedge, right edge, vertical line passing through the center, horizontal linepassing through the center, with reference to the form’s dimensions, and so

on Without the alignment palette, you have to manually compute the pixelsfor exact component location and set the Left, Top, Right, and Bottomproperties of the component in the Object Inspector With the alignmentpalette, the task becomes simple First select multiple components, then

Figure 1-11: To-Do List with pop-up menu

Figure 1-12: To-Do List with add item dialog

Trang 26

invoke the alignment palette by choosing the

View | Alignment Palette menu option from the

main menu The alignment palette is displayed, as

shown in Figure 1-13 Each of the buttons on the

alignment palette corresponds to a type of

align-ment, as explained before While multiple

components are selected together (by holding

down the Shift key and selecting the required

components), click on the appropriate button that provides the type of

alignment you desire All the components that you selected together are

then aligned automatically

New Features

C++Builder 6 provides many new features and enhancements to the ing features of the product In this section, we will go through some of

exist-these new features by different categories It is not possible to discuss all

the new features here

Technology Additions

WebSnap and Enhancements to Internet Development

With C++Builder 6, you can continue to use the WebBroker architecture asyou did with C++Builder 5 In addition, the new WebSnap architecture is

provided, which brings advanced web development concepts into your

hands You can develop complex web applications easier than before in a

very similar style to building VCL applications This is a major feature

addition to the C++Builder programming community The following

fea-tures are provided by WebSnap:

n You can now create multiple web modules in a single web application

by modularizing your development process and expanding your cation’s capabilities However, you cannot add multiple web modules

appli-to WebBroker applications To use the new feature, you should start

developing your applications with the WebSnap framework When youimplement multiple web modules in your application, you can cross-

reference components of one module in the other, and modules may becached or created on demand

n A number of wizards are added in support of the new framework Theyinclude the WebSnap Application Wizard, which creates the main webserver application, the WebSnap Data Module Wizard, which adds one

or more data modules to your web application, and the WebSnap Page

Figure 1-13: Alignment palette

Trang 27

Module Wizard, which adds one or more web page modules to yourapplication The New Items dialog contains a new page to host theWebSnap application wizards.

n In addition to the current web application types (such as ISAPI/NSAPI,CGI, and WinCGI), you can now develop web applications for deploy-ment with the Apache web server The new Web App Debugger exe-cutable module gives you the ability to debug web applications

n A number of new components are provided in support of the newframework and are available in the WebSnap page of the ComponentPalette The new components identify WebSnap framework-relatedelements, such as a web application page module, a web applicationdata module, a simple page module, a data module, and a number ofadapter components that provide scriptable interfaces, which act like abridge between your VCL-style C++ program and the server-sidescripts

n You can now implement server-side scripts in your HTML pages, both

in JavaScript and VBScript In addition, your script can access

C++Builder objects A group of adapter components (including theadapter page producer) even automate your web page design process

by creating required HTML code and server-side script to display theadapter fields and execute the adapter actions In short, your businesslogic in the C++Builder program is exposed to the script through theadapter components Other components include the new dispatchercomponents, such as the page dispatcher to automatically dispatch theincoming HTTP request messages to the appropriate page module andthe adapter dispatcher component to automatically handle the HTMLform submissions and requests for dynamic images by calling adapteraction and field components Also, the new XSL page producer com-ponent generates web page content by transforming data described withXML using an XSL (Extensible Stylesheet Language) template Thereare other miscellaneous components provided for session management,user login process automation, and so on

n Another new feature provided with this framework is that you are able

to preview the HTML pages (embedded with script components) whiledesigning the web module in the code editor This is made possible bythe WebSnap surface designers, which are part of the IDE and areinvoked automatically when you attempt to preview the pages

Trang 28

In simple terms, the WebSnap technology is a very valuable addition to thecurrent C++Builder feature set This new framework is discussed in depth

in Chapter 8 with full working sample projects

BizSnap

BizSnap is the name given by Borland to the web services technology NowC++Builder programmers can build web services in the VCL application

style and publish the WSDL (Web Services Definition Language)

docu-ments along with their web services When you go through this new topic

in Chapter 11, you will appreciate the simplicity of Borland’s tion of SOAP (Simple Object Access Protocol)-based application

implementa-development

Enhancements

Enhancement to DataSnap

Borland extended the web services technology to the DataSnap architecture

to enable you to publish your DataSnap server services through SOAP tocol for access by the DataSnap clients over the Internet You can easily

pro-add a web interface to your current client-server applications developed

using the DataSnap architecture The DataSnap architecture is discussed inChapters 6 and 9, while its SOAP extension is discussed in Chapter 11

New Database Support

C++Builder 6 includes support for dbExpress, the new data access ogy introduced by Borland The concept of unidirectional datasets is

technol-implemented in this technology, improving the data access speeds with theuse of unidirectional cursors Use of this technology requires new databasedrivers C++Builder 6 comes with dbExpress drivers for InterBase, Oracle,Informix, DB2, and MySQL More and more drivers for other popular

architectures and database systems (such as Microsoft SQL Server, ODBCplug-in, and so on) are being added by third-party vendors and Borland

itself Chapter 6 discusses features of this technology in detail with sampleapplications

STLPort Standard Template Library

The new STLPort standard template library has become popular due to itsenhanced compliance with ANSI C++ and multi-platform support

C++Builder 6 includes this library as part of the product

Trang 29

New Components and Wizards

The action component functionality is enhanced with a number of new tures as well as components The action main menu bar, action toolbar,action manager customization dialog, and a number of standard actionsfacilitate simplification of the user interface development process This will

fea-be explained in Chapter 4 to a great extent The value list editor, colorcombo box, and labeled edit box are some additional general-purpose com-ponents The Object TreeView discussed earlier is a new addition in thisrelease The Object Inspector is enhanced with expanded inline

components

The Internet Direct (Indy) components are open source Internet nents Three new pages in the Component Palette provide Indy clientcomponents, Indy server components, and miscellaneous Indy components.The MIDAS page has been replaced by DataSnap due to the name change

compo-of the framework

The new Component Library for Cross-platform development (CLX) isadded to this version of C++Builder with the C++ version of the compo-nents However, the library was first released with Delphi 6, then Kylix,and now C++Builder This topic is discussed in Chapter 12

The new XML (Extensible Markup Language) Data Binding Wizardgenerates interfaces and class definitions that correspond to the structure of

an XML document or schema The XML data bindings simplify the process

of complex coding to access the XML documents using the DOM ment Object Model) interfaces This is accessible through the New Itemsdialog The new XML document component also supports the simplifiedversion of DOM interface implementation, which may be configured to use

(Docu-a customized third-p(Docu-arty vendor-supplied DOM interf(Docu-ace implement(Docu-ation.The XML concepts are discussed in Chapter 11 A new tool called XMLmapper is supplied with C++Builder 6 and can be used to convert a datapacket created by a client dataset component into an XML data packet, andvice versa This is very useful to smoothly transition a traditional datamodel into an XML schema and vice versa, enabling you to elevate yourDataSnap applications with XML-based interfaces This topic is discussed

in more detail in Chapter 9 CORBA development is enhanced with support

to the new VisiBroker 4.5 architecture

Trang 30

Working with Projects

Every application that we develop is in the form of a project The project

may be a simple Windows executable, a console application, or a DLL

Whatever the output is of your application, it is represented by a project

What Constitutes a C++Builder 6 Project?

A C++Builder 6 project constitutes a set of files Each file that becomes

part of a project has a specific purpose and identification The main projectfile has the bpr file extension (“bpr” stands for Borland project) When theproject is compiled and linked, the final (binary) executable file will havethe same filename as the main project file with a different extension, such

as exe If you create a Windows DLL application, an additional aged file with the bpf extension is added to the project When you create

IDE-man-Borland packages, the bpk file is created to store the project options, and

the binary packages have the default file extension bpl, similar to the wayWindows DLLs are created with the default file extension dll Borland

packages have a corresponding bpi file (which is the import library for thepackage) The bpi file corresponds to a bpl file in a similar way to how animport library corresponds to a DLL file

Every form added to the project will have three files: one dfm file

(which stores the form definition), one h file (which is the header file for

the form definition), and one cpp file (which contains the form

implemen-tation code) These three files are collectively called a unit in a C++Builder

application (similar to the Delphi unit) The main difference between a

Delphi unit and a C++Builder unit is that the C++Builder unit contains anadditional header file

In addition to the standard files discussed above, a web project may have

an HTML file to contain the HTML code (and any server-side script)

When you compile a project, the IDE creates additional obj files, which

contain the intermediate object code .lib files are created when you createstatically bound DLLs, which are linked with the applications that use theDLL files

Every time you save project files, a backup file is created with the ~

symbol as the first character of the file extension For example, when yousave a file by the name “unit1.cpp,” the backup file is named “unit1.~cpp.”There are other file types that may be created, depending on the type of pro-ject you are building The beauty of the C++Builder environment is that itcreates the minimum number of files, which are easily manageable

Files contained within a project are managed with the help of the ProjectManager window, which is displayed when you select the View | Project

Trang 31

Manager option from the IDE main menu Multiple projects may begrouped together as a project group, and the project group definition file issaved with the bpg file extension You can give any name to a projectgroup You are not required to create a project group, but you must create aproject if you need to build an application.

Project configuration options may be set using the Project Options log, which is displayed by selecting the Project | Options menu option fromthe IDE main menu Figure 1-14 displays a typical Project Options dialog.When you select the Project | Edit Option Source option from the IDE mainmenu, the entire project configuration is displayed in the form of an XMLdocument

dia-Setting Project Options

In this section we will go through some of the frequently used projectoptions The Project Options dialog displayed in Figure 1-14 has a number

of pages, and each page has options for a specific need The Forms pagelets you specify which of the forms in the project should be autocreated.When you create a Windows application project, the application creates allthe forms when the application is initialized by default But you can controlwhich forms should be created automatically from this page, since you canprogrammatically create forms on demand This topic is discussed inChapter 3

Figure 1-14: Project Options dialog

Trang 32

The Application page lets you edit the application title, main help file, andapplication icon The Compiler and Advanced Compiler pages let you

change the default compiler settings/switches, as required by your

application The C++ page allows you to change the language-specific tings The Directories/Conditionals page lets you add additional directories

set-to search for the include files and library files By default, the direcset-tories

where C++Builder 6 is installed are listed in this page If you change the

default directory names, your project may not compile The Linker and

Advanced Linker pages let you edit the options used by the linker The

Packages page is used for two purposes: to install and uninstall packages

(of components) in the Component Palette; this list is identified as design

time packages In addition, there is a check box towards the bottom

cap-tioned “Build with runtime packages” accompanied by an edit box and anAdd button When this check box is checked, your executable (or

DLL/BPL) file size will be very compact because the linker does not

include the code referenced from the packages (specified in the edit box byclicking the Add button) into your executable Rather, your executable willonly have a reference to the specific packages, which are loaded into mem-ory dynamically at the time of execution In this case, you will have to

distribute the particular packages with your application for distribution

This is usually a preferable and recommended method But, if you wish todistribute your application as a stand-alone executable without the run-timepackages, then you have to uncheck the box so the code referenced from

the packages will be included in your executable In this case, your able program size will usually be larger This option may be acceptable forsmall-sized applications, but it is very inconvenient if you are building verylarge applications

execut-Borland Packages and Components

The components are usually built into larger containers called packages.

Borland packages are special dynamic-link libraries (DLLs) created and

used by Borland applications in C++Builder (and Delphi) environments Ifyou are building libraries to be used by external development environ-

ments, such as Microsoft Visual C++, then you are advised to create DLLs

If you are creating libraries for exclusive use by C++Builder (and Delphi)developers, then you are advised to create Borland packages, which have

the default file extension bpl However, there are compatibility issues

well-known in the developer community with regard to using DLLs oped in Microsoft Visual C++ in a C++Builder application and vice versa.There are also ways to overcome the majority of these problems, which arebeyond the scope of this book

Trang 33

Components form the major part of the C++Builder 6 development

envi-ronment Components are reusable objects (classes with specific features

that enable them to be accessed through the Component Palette) With eachedition of C++Builder 6, Borland provides a set of components You mayalso buy components built and sold by third-party vendors, or you maybuild components yourself

Borland provides two types of component frameworks: the Visual ponent Library (VCL) and the Component Library for Cross-platformdevelopment (CLX) The VCL is designed exclusively for the MicrosoftWindows operating system while the CLX is designed to work with boththe Windows and Linux operating systems Component architectures andtheir usage is discussed in detail in Chapters 3, 4, and 12 In addition, everychapter discusses some components relevant to the topic of the chapter.Therefore, components form a vital part of this development tool You mayalso use the ActiveX components (built in any development environment);however, to use ActiveX components, you must first import them intoC++Builder 6 and install them onto the Component Palette as local

Com-components

Installing Third-Party Vendor Components

Installing third-party vendor components is a fairly easy process Most ofthe vendor packages come with an installation program (or a self-extractingcompressed executable file), which performs the installation task If aninstallation package is not provided (as is usually the case with sharewarecomponents), you can install the packages yourself Borland packages areidentified with the file extension bpl with the corresponding packageimport libraries having the file extension bpi The Install Packages dialogmay be invoked two ways: either by selecting the Component | Install Pack-ages menu option from the IDE main menu or by opening the Packagespage in the Project Options dialog, as explained earlier Either methodopens the same dialog, in which you can use the Add and Remove buttons

to add a new package to the Component Palette or remove an alreadyinstalled package from the Component Palette I advise you not to play withthe default packages installed by C++Builder because if you accidentallyremove an existing package, you may not be able to compile your applica-tions Once you install the packages, you don’t have to repeat the procedureevery time you start the C++Builder IDE; they are automatically loaded andmade available for your project Also, do not forget to add the direc-tory/path information for the include files and libraries in the projectoptions If you do not do this, your projects may not compile or link, partic-ularly when you use these components in your programs

Trang 34

Types of Projects That C++Builder 6 Supports

C++Builder 6 is capable of building several application types, as listed

here:

n Standard Windows executable files

n Console applications that execute at the Windows command prompt

n Windows dynamic-link libraries (DLLs) for use by any development

platform that supports linking to DLLs

n Borland packages and components in VCL and CLX frameworks forexclusive use by Borland C++Builder and Delphi platforms

n ActiveX components for use by any development platform that

sup-ports ActiveX technology

n Applications using either VCL or CLX

n Multi-threaded applications

n Windows control panel applications

n Windows service applications

n ActiveX components and automation servers

n COM objects, COM+ event objects, COM+ subscription objects, andtransactional objects

n CORBA servers and clients

n Three-tier client-server applications using Borland’s proprietary

DataSnap architecture

n Networking applications using many TCP/IP-based protocols, ing socket-based applications (blocking and non-blocking), FTP clientsand servers, SMTP clients and servers, NNTP clients and servers,

includ-Telnet clients and servers, HTTP clients and servers, and so on

n Web server applications of different types, including ISAPI/NSAPI,

CGI, WinCGI, and Apache server modules using either WebBroker orWebSnap architecture

n Web service clients and server objects using the SOAP/HTTP

architecture

n Applications providing OLE support and connecting to Microsoft

Office Servers, such as Word, Excel, PowerPoint, and Outlook

Most of these project types are initiated from the New Items dialog, which

is opened by selecting the File | New | Other menu option from the IDE

main menu or by clicking the shortcut button in the Standard toolbar Figure1-15 displays the New Items dialog

Trang 35

Building User Interfaces

In this section, I only present an overview of the user interface design cess because the details of building VCL-based applications are discussed

pro-in Chapter 3 Typically, a Wpro-indows application would have a form as themain component—at least one form When we create a standard Windowsapplication, a main form with the corresponding unit file and header file isautomatically created for you, and the necessary code to create an instance

of the form and initiate the application is added to the main application gram Please remember that a form does not constitute the main applicationprogram A form is only an object within the main program, and the mainprogram incorporates the WinMain function You may add more forms tothe project afterward, through either the New Items dialog or the IDE mainmenu

pro-The form acts as the main container of all the visual and non-visual ponents Examples of visual components include edit boxes, check boxes,rich text edit boxes, list boxes, list views, simple buttons, radio buttons, and

com-so on, while examples of non-visual components include database-relatedcomponents, such as connections, tables, query objects, and so on

Most of the visual components have some common properties withrespect to positioning the component on the form (or on any other containerplaced on the form, such as panels and group boxes); these propertiesinclude Top, Left, Width, and Height, all integer values representing pixels.The Anchors property lets you fix the distance (in pixels) of the componentfrom the four edges (left, right, top, and bottom) The Align property speci-fies how the component should be aligned with respect to its parent

Figure 1-15: New Items dialog

Trang 36

component You may also use the alignment palette to align multiple ponents together, as discussed earlier The Name property represents the

com-name of the particular instance of the component and should be unique forthe unit (or the form) You may, however, use the same component name indifferent units, and when you refer to them, you qualify the component

name with the form name (as in Form2à ADOConnection) Also, the

Name property does not permit spaces in the property value (since this resents a class variable of the object within the form class) The Visible

rep-property makes the component visible during run time, if set to true

Remember, it is always visible during design time The Tag property takes

an integer value and may be used for any purpose you like The Hint erty is a text string and a run-time setting When a value is set for this

prop-property, the hint text is displayed when the user moves the cursor over thecomponent However, to enable the hint text display, you must also set theShowHint property to true

Your First Windows Application

Almost all readers (including myself) expect to see the famous Hello Worldexample when we first open a book about a new product I don’t want to

deviate from this tradition In this section, let me start demonstrating

C++Builder with a much-awaited example Let’s go through the steps

involved in building a simple Windows application

From the New Items dialog, double-click the application icon This willcreate a project with the main form and the unit files Every time I create aproject, the first thing I do is save the project files in an appropriate folder.When we save this project, we have to provide a name for the unit file and aname for the project file The unit file is saved with the file extension cpp,while the project file is saved with the bpl file extension From the IDE

Standard toolbar, there is a button for the Save All operation Click that ton (or select the menu option File | Save All) to invoke the Save dialog

but-The Save All operation attempts to save all the files in the project that weremodified since the last time they were saved In the Save dialog, you first

have to provide a name for the unit and then for the project I named the

unit file “HelloWorldUnit.cpp” and the project “HelloWorld.bpl.” It is

required that we give different names to both the files (even though they

have different file extensions) because the IDE creates a cpp file for the

project with the same name as the project’s bpl file To see the files created

in the project, select the View | Project Manager option This displays the

Project Manager window, as shown in Figure 1-16

Trang 37

To open a source file in the project, double-click the item in the list thatshows the source filename To add more source files or remove source filesattached to a project, place the mouse cursor on the project name and right-click You will see a pop-up menu of options for working with individualitems in the project.

Let’s reduce the size of the form since our example does not need a bigform In the Object Inspector, set the Height property to 300 and the Widthproperty to 400 Also, set the Name property to “HelloWorldForm,” andsave the files When you change the Name property of the form, notice thatthe dfm filename is also changed to the form name

From the Standard page of the Component Palette, drop aTLabel ponent and aTButton component onto the form The TLabel componentrepresents a label andTButton represents a button When you drop a com-ponent from the Component Palette, the IDE sets a default name to theinstance of the component by appending a serial number (starting from 1)

com-to the component name and dropping the first character T If you drop moreinstances of the same component, the serial number is increased by 1 forevery instance Thus, theTLabel’s instance is named Label1, and TButton’sinstance is named Button1 You may change the name of the component bysetting its Name property to a different (unique) value, as discussed earlier

It is normally advised to give meaningful names to the objects, since youwill be referring to them in the program Therefore, let’s change the Nameproperty of Label1 to HelloWorldLabel and Button1 to HelloWorldButton.Also, change the Caption property of the button to “Hello,” and erase theCaption property of the label by deleting its value in the Object Inspector.For the button component, double-click the OnClick event in the Eventspage of the Object Inspector This will create an empty event handler in theprogram unit file and a corresponding entry in the public section of the

Figure 1-16: Project Manager window

Trang 38

form class in the unit header file Let’s now write a single line of code in

the event handler to set the Caption property of the label Two points are

noteworthy at this time The property of the object (such as Caption) is

accessed through the arrow notation (à) since the label object is created onthe heap and is accessed through the object’s address The label object is

owned by the form and destroyed automatically when the form is

destroyed This is a feature of VCL forms and their objects The VCL

architecture is discussed in detail in Chapters 3 and 4 The second point isthat the Caption property is an AnsiString object and is set as a string literal

in this case The traditional way of creating string objects using the standardstrcpy() method is not used here AnsiString is a powerful string class and

is also discussed in detail in Chapter 3 While using C++Builder 6, you willnotice that you will be using more sophisticated (prebuilt) VCL objects, andmost of the time you will be working with the objects through their proper-ties, methods, and events The rest of the chapters in the book will provideenough detail in this respect

Let’s add another button component from the Component Palette and

change its Name property to MessageClearButton and its Caption property

to “Clear.” In the OnClick event handler of this method, we will set the

Caption of the label to a NULL string The purpose of this event handler is

to clear the label caption when clicked

Build the project by selecting the Project | Make HelloWorld option fromthe IDE main menu When you execute the project, you will see the two

buttons; one button sets the “Hello World!” string, and the other button

clears the string The program is very simple, so I do not present the sourcecode here, but the project is available on the companion CD

Please note that usually when an application is executed, the objects

belonging to the form have an initial state, which is set in the Object

Inspector during design time This means that properties set for the objectsbefore the project was saved and compiled become initial settings How-

ever, not every property of an object is accessible through the Object

Inspector (if they are not published when the component is developed, as

explained in Chapter 12) Such properties are called run-time properties andare accessible only through the program code, not during design time

When a component is dropped from the Component Palette, most of the

properties are set with the corresponding default values during object struction as designed by the component writer (even the run-time

con-components are set, but these are not visible in the Object Inspector) If weneed to change the default setting of run-time properties, we can do so in

the form constructor or in another form-level event appropriate to the

circumstance

Trang 39

Since this is the first chapter of the book, I made it more useful for comers to the C++Builder community in order to help them navigatethrough some of the toolbars and dialogs and familiarize them with theproduct’s ability to build their applications For those who don’t need anintroduction to the product, the new features of the current release are pre-sented in summary

new-This chapter began with an overview of the individual parts of the IDE.The next section outlined the new features that Borland introduced in thisrelease, which was followed by an outline of how to build C++Builder 6projects, the constituent elements of a project, the types of projects we canbuild using C++Builder 6, setting project options, and how to installthird-party vendor components onto the Component Palette Finally, thechapter concluded with a presentation of the Hello World application

Trang 40

C++ Advanced

Concepts

Introduction

Before we jump on to discuss the core functionality offered by C++Builder

6, I would like to take the opportunity to present you with a high-level view of some of the standard C++ language features and extensions made

over-to the language in order over-to support the Visual Component Library work VCL is discussed in more detail in later chapters I also want to make

frame-it clear that I do not intend to cover the core C++ language in this chapter;rather, I will highlight special features of the language that make the lan-guage better utilized by application developers If you are new to the C++language but familiar with another object-oriented language, you may notfind it difficult to have a smooth ride with this book But if you are new toobject-oriented languages in general, I recommend that you refer to a bookthat exclusively teaches you the C++ language in addition to using thisbook

I would also like to mention that the language is not that hard, thoughmany programmers are scared to even consider learning it I encouragesuch programmers with the simple words: “C++Builder makes learningC++ language a really simple and pleasant experience.” Please do not think

I am trying to market the product I am not It really is a cool tool In myopinion, it is as simple to develop in C++Builder as it is in Visual Basic orDelphi

At this time, I would like to mention Borland’s Delphi, which is anObject Pascal-based RAD tool for Windows development Borland main-tains a tight, as well as loose, relationship between its two powerful

development environments: Delphi and C++Builder I call the relationshiptight because the two component architectures are very similar in their fea-tures; components developed in one platform may be ported to the othereasily I also call the relationship loose because to use one platform, we do

23

Ngày đăng: 19/01/2014, 07:20

w