Developer’s Guide Borland Software Corporation 100 Enterprise Way, Scotts Valley, CA 95066-3249 Borland ® Kylix ™ Delphi ™ for Linux ® Refer to the file DEPLOY located in the root directory of your Kylix product for a complete list of files that you can distribute in accordance with the Kylix License Statement and Limited Warranty. Borland Software Corporation may have patents and/or pending patent applications covering subject matter in this document. The furnishing of this document does not give you any license to these patents. C OPYRIGHT © 1983, 2001 Borland Software Corporation. All rights reserved. All Inprise and Borland brand and product names are trademarks or registered trademarks of Borland Software Corporation. Other brand and product names are trademarks or registered trademarks of their respective holders. PrintedintheU.S.A. HDB7010WW21001 1E0R0201 0102030405-9 8 7654321 PDF iii Chapter 1 Introduction 1-1 What’sinthismanual? 1-1 Manualconventions 1-2 Developersupportservices 1-2 Orderingprinteddocumentation 1-2 Part I Programming with Kylix Chapter 2 Developing applications with Kylix 2-1 Integrateddevelopmentenvironment 2-1 Designingapplications 2-2 Developingapplications 2-2 Creatingprojects 2-3 Editing code. . . 2-3 Compiling applications . . 2-4 Debuggingapplications 2-4 Deployingapplications 2-5 Chapter 3 Using CLX 3-1 UnderstandingCLX 3-1 Properties,methods,andevents 3-3 Properties 3-3 Methods 3-4 Events 3-4 Widgetevents 3-4 Systemevents 3-4 Whatisanobject? 3-5 ExaminingaKylixobject 3-5 Changing the name of a component . . . 3-7 Inheriting data and code from an object . . . 3-8 Scopeandqualifiers 3-8 Private, protected, public, and published declarations 3-9 Usingobjectvariables 3-10 Creating, instantiating, and destroying objects 3-11 Componentsandownership 3-11 MajorbranchesoftheCLXhierarchy 3-12 TObjectbranch 3-13 TPersistentbranch 3-14 TComponentbranch 3-14 TControlbranch 3-16 TWidgetControlbranch 3-17 Usingcomponents 3-17 Components on the component palette. . . 3-18 Textcontrols 3-19 Textcontrolproperties 3-19 Propertiesofmemocontrols 3-20 Specializedinputcontrols 3-20 Scrollbars 3-20 Trackbars 3-20 Spin edit controls 3-21 Buttonsandsimilarcontrols 3-21 Buttoncontrols 3-22 Bitmapbuttons 3-22 Speedbuttons 3-22 Checkboxes 3-22 Radiobuttons 3-23 Toolbars 3-23 Splittercontrols 3-23 Handlinglists 3-24 Listboxesandcheck-listboxes 3-24 Comboboxes 3-25 Treeviews 3-25 Listviews 3-25 Groupingcomponents 3-26 Groupboxesandradiogroups 3-26 Panels 3-26 Scrollboxes 3-27 Tabcontrols 3-27 Pagecontrols 3-27 Headercontrols 3-27 Providingvisualfeedback 3-28 Labels 3-28 Statusbars 3-28 Progressbars 3-29 Helpandhintproperties 3-29 Grids 3-29 Drawgrids 3-29 Stringgrids 3-30 Graphicsdisplay 3-30 Images 3-30 Shapes 3-30 Bevels 3-31 Paintboxes 3-31 Dialogboxes 3-31 Usingopendialogboxes 3-31 Usinghelperobjects 3-32 Workingwithlists 3-32 Contents iv Workingwithstringlists 3-32 Loadingandsavingstringlists 3-33 Creatinganewstringlist 3-33 Manipulatingstringsinalist 3-35 Associating objects with a string list . . .3-37 Creatingdrawingspaces 3-37 Printing 3-38 Usingstreams 3-38 Chapter 4 Common programming tasks 4-1 Understandingclasses 4-1 Definingclasses 4-2 Handlingexceptions 4-4 Protectingblocksofcode 4-4 Respondingtoexceptions 4-5 Exceptionsandtheflowofcontrol 4-5 Nestingexceptionresponses 4-6 Protectingresourceallocations 4-7 What kind of resources need protection? 4-7 Creating a resource protection block . . . 4-8 HandlingRTLexceptions 4-8 WhatareRTLexceptions? 4-9 Creatinganexceptionhandler 4-10 Exceptionhandlingstatements 4-10 Usingtheexceptioninstance 4-11 Scopeofexceptionhandlers 4-12 Providing default exception handlers 4-12 Handlingclassesofexceptions 4-13 Reraisingtheexception 4-13 Handlingcomponentexceptions 4-14 Exception handling with external sources 4-14 Silentexceptions 4-15 Definingyourownexceptions 4-16 Declaringanexceptionobjecttype 4-16 Raisinganexception 4-16 Usinginterfaces 4-17 Interfacesasalanguagefeature 4-17 Implementing interfaces across thehierarchy 4-18 Usinginterfaceswithprocedures 4-19 ImplementingIInterface 4-20 TInterfacedObject 4-20 Usingtheasoperator 4-21 Reusingcodeanddelegation 4-22 Usingimplementsfordelegation 4-22 Memory management of interface objects 4-23 Usingreferencecounting 4-23 Notusingreferencecounting 4-24 Workingwithstrings 4-24 Charactertypes 4-25 Stringtypes 4-25 Shortstrings 4-26 Longstrings 4-26 WideString 4-27 PChartypes 4-27 OpenString 4-27 Runtime library string handling routines 4-27 Widecharacterroutines 4-28 Commonly used long string routines 4-28 Declaringandinitializingstrings 4-31 Mixingandconvertingstringtypes 4-32 StringtoPCharconversions 4-32 Stringdependencies 4-32 Returning a PChar local variable. . . . . 4-33 Passing a local variable as a PChar . . . 4-33 Compilerdirectivesforstrings 4-34 Strings and characters: related topics . . . . 4-34 Workingwithfiles 4-35 Manipulatingfiles 4-35 Deletingafile 4-35 Findingafile 4-36 Changingfileattributes 4-37 Renamingafile 4-38 Filedate-timeroutines 4-38 FiletypeswithfileI/O 4-38 Usingfilestreams 4-39 Creatingandopeningfiles 4-39 Usingthefilehandle 4-40 Readingandwritingtofiles 4-40 Readingandwritingstrings 4-41 Seekingafile 4-41 Filepositionandsize 4-42 Copying 4-42 ObjectPascaldatatypes 4-43 Chapter 5 Building applications and shared objects 5-1 Creatingapplications 5-1 GUIapplications 5-1 Userinterfacemodels 5-2 v Setting IDE, project, and compilation options 5-2 Consoleapplications 5-2 Creatingpackagesandsharedobjectfiles 5-3 Workingwithsharedobjectlibraries 5-3 When to use packages and shared objects 5-4 Writingdatabaseapplications 5-4 Building distributed applications . . . 5-5 Distributing applications using TCP/IP . . . 5-5 Usingsocketsinapplications 5-5 CreatingWebserverapplications 5-6 Using data modules and remote data modules 5-6 Creatingdatamodules 5-7 Creating business rules in a data module 5-7 Accessingadatamodulefromaform 5-7 Programmingtemplates 5-8 Sharing code: Using the Object Repository . . . 5-8 Sharingitemswithinaproject 5-8 Adding items to the Object Repository . . . 5-8 Sharing objects in a team environment . . . 5-9 Using an Object Repository item in a project 5-9 Copyinganitem 5-9 Inheritinganitem 5-10 Usinganitem 5-10 Usingprojecttemplates 5-10 Modifyingshareditems 5-10 Specifying a default project, new form, andmainform 5-11 Reusing components and groups of components 5-11 Creating and using component templates . . . 5-11 EnablingHelpinCLXapplications 5-12 Helpsysteminterfaces 5-12 ImplementingICustomHelpViewer 5-13 Communicating with the Help Manager 5-13 Asking the Help Manager for information 5-14 Displayingkeyword-basedHelp 5-15 Displayingtablesofcontents 5-15 ImplementingIExtendedHelpViewer 5-16 ImplementingIHelpSelector 5-17 RegisteringHelpsystemobjects 5-17 RegisteringHelpviewers 5-17 RegisteringHelpselectors 5-18 UsingHelpinaCLXApplication 5-18 How TApplication processes Help . . . . . 5-18 HowcontrolsprocessHelp 5-18 CallingtheHelpsystemdirectly 5-19 UsingIHelpSystem 5-19 CustomizingtheIDEHelpsystem 5-20 Chapter 6 Developing the application user interface 6-1 Controlling application behavior 6-1 Usingthemainform 6-1 Addingforms 6-2 Linkingforms 6-2 Hidingthemainform 6-3 Workingattheapplicationlevel 6-3 Setting up the look and feel of your application 6-3 Handlingthescreen 6-4 Managinglayout 6-4 Usingforms 6-4 Controlling when forms reside in memory 6-5 Displayinganauto-createdform 6-5 Creatingformsdynamically 6-5 Creating modeless forms such as windows 6-6 Using a local variable to create a form instance 6-6 Passing additional arguments to forms . . . . 6-7 Retrievingdatafromforms 6-8 Retrieving data from modeless forms . . . 6-8 Retrieving data from modal forms. . . . . 6-9 Workingwithframes 6-11 Creatingframes 6-11 Adding frames to the Component palette 6-12 Usingandmodifyingframes 6-12 Sharingframes 6-13 Usingactionlists 6-13 Whatisanaction? 6-14 Settingupactionlists 6-14 What happens when an action fires . . . . . 6-15 Respondingwithevents 6-15 Howactionsfindtheirtargets 6-17 Updatingactions 6-17 Predefinedactionclasses 6-18 Writingactioncomponents 6-18 Registeringactions 6-19 vi Creatingandmanagingmenus 6-19 Designingmenus 6-20 Building menus. 6-22 Namingmenus 6-22 Namingthemenuitems 6-22 Adding, inserting, and deleting menuitems 6-23 Creatingsubmenus 6-24 Addingimagestomenuitems 6-26 Viewingthemenu 6-26 Editing menu items in the Object Inspector 6-27 Using the Menu Designer context menu 6-27 Commandsonthecontextmenu 6-27 Switching between menus at designtime 6-28 Usingmenutemplates 6-29 Savingamenuasatemplate 6-30 Naming conventions for template menu itemsandeventhandlers 6-31 Manipulatingmenuitemsatruntime 6-31 Designingtoolbars 6-31 Adding a toolbar using a panel component 6-32 Addingaspeedbuttontoapanel 6-32 Assigningaspeedbutton’sglyph 6-33 Setting the initial condition of a speedbutton 6-33 Creatingagroupofspeedbuttons 6-33 Allowingtogglebuttons 6-34 Adding a toolbar using the toolbar component 6-34 Addingatoolbutton 6-34 Assigningimagestotoolbuttons 6-35 Setting tool button appearance and initialconditions 6-35 Creatinggroupsoftoolbuttons 6-35 Allowingtoggledtoolbuttons 6-36 Respondingtoclicks 6-36 Assigningamenutoatoolbutton 6-36 Adding hidden toolbars . . 6-36 Hidingandshowingtoolbars 6-37 Chapter 7 Working with controls 7-1 Workingwithtextincontrols 7-1 Settingtextalignment 7-1 Addingscrollbarsatruntime 7-2 Addingaclipboardtoanapplication 7-3 Selectingtext 7-3 Selectingalltext 7-4 Cutting,copying,andpastingtext 7-4 Deletingselectedtext 7-5 Disablingmenuitems 7-5 Providingapop-upmenu 7-5 HandlingtheOnPopupevent 7-6 Addinggraphicstocontrols 7-7 Indicating that a control is owner-drawn. . . 7-7 Adding graphical objects to a string list . . . 7-8 Adding images to an application . . . . . 7-8 Sizingowner-drawitems 7-8 Drawingowner-drawitems 7-9 Chapter 8 Working with graphics 8-1 Overviewofgraphicsprogramming 8-1 Refreshingthescreen 8-2 Typesofgraphicobjects 8-2 Common properties and methods of Canvas 8-3 Using the properties of the Canvas object 8-5 Usingpens 8-5 Usingbrushes 8-7 Changingthebrushcolor 8-7 Changingthebrushstyle 8-8 Setting the Brush Bitmap property. . . . . 8-8 Using Canvas methods to draw graphic objects 8-9 Drawinglinesandpolylines 8-9 Drawingshapes 8-10 Handling multiple drawing objects in your application 8-11 Keeping track of which drawing tool touse 8-11 Changing the tool with speed buttons . . . 8-12 Usingdrawingtools 8-13 Drawingshapes 8-13 Sharing code among event handlers 8-14 Drawingonagraphic 8-16 Makingscrollablegraphics 8-16 Addinganimagecontrol 8-16 Placingthecontrol 8-16 Settingtheinitialbitmapsize 8-17 Drawingonthebitmap 8-17 Loadingandsavinggraphicsfiles 8-18 Loadingapicturefromafile 8-18 Savingapicturetoafile 8-19 vii Replacingthepicture 8-19 Usingtheclipboardwithgraphics 8-20 Copyinggraphicstotheclipboard 8-21 Cuttinggraphicstotheclipboard 8-21 Pastinggraphicsfromtheclipboard 8-21 Rubberbandingexample 8-22 Respondingtothemouse 8-22 What’sinamouseevent? 8-23 Responding to a mouse-down action. . .8-23 Respondingtoamouse-upaction 8-24 Respondingtoamousemove 8-24 Adding a field to a form object to track mouseactions 8-25 Refininglinedrawing 8-26 Trackingtheoriginpoint 8-26 Trackingmovement 8-27 Chapter 9 Writing multi-threaded applications 9-1 Definingthreadobjects 9-1 Initializingthethread 9-2 Assigningadefaultpriority 9-2 Indicatingwhenthreadsarefreed 9-3 Writingthethreadfunction 9-3 UsingthemainCLXthread 9-3 Usingthread-localvariables 9-5 Checking for termination by other threads 9-5 Handling exceptions in the thread function 9-5 Writingclean-upcode 9-6 Coordinatingthreads 9-6 Avoiding simultaneous access . . . 9-6 Lockingobjects 9-6 Usingcriticalsections 9-7 Using the multi-read exclusive-write synchronizer 9-7 Other techniques for sharing memory 9-8 Waitingforotherthreads 9-8 Waiting for a thread to finish executing 9-8 Waitingforatasktobecompleted 9-9 Executingthreadobjects 9-10 Overridingthedefaultpriority 9-10 Startingandstoppingthreads 9-11 Debuggingmulti-threadedapplications 9-11 Chapter 10 Developing cross-platform applications 10-1 Porting Windows applications to Linux . . . . 10-1 Portingtechniques 10-2 Platform-specificports 10-2 Cross-platformports 10-2 Windowsemulationports 10-2 Portingyourapplication 10-2 CLXversusVCL 10-4 WhatCLXdoesdifferently 10-5 Lookandfeel 10-5 Styles 10-5 Variants 10-5 Noregistry 10-6 Otherdifferences 10-6 MissinginCLX 10-6 Featuresthatwillnotport 10-7 KylixandDelphiunitcomparison 10-8 Differences in CLX object constructors 10-11 Sharing source files between Windows andLinux 10-12 Environmental differences between WindowsandLinux 10-12 DirectorystructureonLinux 10-14 Writingportablecode 10-15 Usingconditionaldirectives 10-16 Terminating conditional directives 10-17 Emittingmessages 10-18 Including inline assembler code . . . . 10-18 Messagesandsystemevents 10-19 Programming differences on Linux . . . . 10-20 Cross-platform database applications . . . . 10-21 dbExpressdifferences 10-21 Component-leveldifferences 10-22 Userinterface-leveldifferences 10-23 Porting database applications to Linux 10-23 Updating data in dbExpress applications 10-25 Cross-platformInternetapplications 10-27 Porting Internet applications to Linux 10-27 viii Chapter 11 Working with packages and components 11-1 Whyusepackages? 11-2 Packagesandstandardsharedobject files 11-2 Runtimepackages 11-2 Usingpackagesinanapplication 11-3 Dynamicallyloadingpackages 11-4 Deciding which runtime packages touse 11-4 Custompackages 11-4 Design-timepackages 11-4 Installingcomponentpackages 11-5 Creatingandeditingpackages 11-6 Creatingapackage 11-6 Editing an existing package 11-7 Editing package source files manually 11-7 Understanding the structure of a package 11-8 Namingpackages 11-8 TheRequiresclause 11-8 TheContainsclause 11-9 Compiling packages 11-9 Package-specific compiler directives 11-10 Using the command-line compiler andlinker 11-11 Package files created by a successful compilation 11-11 Deployingpackages 11-12 Deploying applications that use packages 11-12 Distributing packages to other developers 11-12 Chapter 12 Creating international applications 12-1 Internationalizationandlocalization 12-1 Internationalization 12-1 Localization 12-1 Internationalizingapplications 12-2 Enablingapplicationcode 12-2 Charactersets 12-2 Multiplebytecharactersets 12-2 Widecharacters 12-3 Designingtheuserinterface 12-4 Text 12-4 Graphicimages 12-4 Formatsandsortorder 12-4 Keyboardmappings 12-5 Isolatingresources 12-5 Creatingresourcemodules 12-5 Usingresourcemodules 12-6 Localizingapplications 12-6 Chapter 13 Deploying applications 13-1 Deployinggeneralapplications 13-1 Deploymentissues 13-2 Usinginstallationprograms 13-2 Identifyingapplicationfiles 13-2 Packagefiles 13-2 Helperapplications 13-3 Sharedobjectfilelocations 13-3 Deployingdatabaseapplications 13-3 Connectingtoadatabase 13-4 Updatingconfigurationfiles 13-4 DeployingWebapplications 13-4 DeploymentonApache 13-5 Programming for varying host environments 13-5 Screen resolutions and color depths. . . . . 13-6 Considerations when not dynamically resizing 13-6 Considerations when dynamically resizingformsandcontrols 13-6 Accommodating varying color depths 13-7 Fonts 13-8 Softwarelicenserequirements 13-8 Deploy.txt 13-8 README 13-8 No-nonsenselicenseagreement 13-9 GPLlicenseagreement 13-9 Third-party product documentation . . . . 13-9 Part II Developing database applications Chapter 14 Designing database applications 14-1 Usingdatabases 14-1 Typesofdatabases 14-2 Databasesecurity 14-3 ix Transactions 14-3 Referential integrity, stored procedures, andtriggers 14-4 Databasearchitecture 14-4 Generalstructure 14-4 Theuserinterfaceform 14-5 Thedatamodule 14-5 Using a client dataset with data stored ondisk 14-6 Usingaunidirectionaldatasetdirectly 14-8 Using a client dataset to buffer records 14-9 Usingamulti-tieredarchitecture 14-11 Combiningapproaches 14-12 Chapter 15 Using data controls 15-1 Usingcommondatacontrolfeatures 15-2 Associating a data control with a dataset 15-3 Changing the associated dataset atruntime 15-3 Enabling and disabling the data source 15-4 Responding to changes mediated by thedatasource 15-4 Editing and updating data 15-4 Enabling editing in controls on userentry 15-5 Editing data in a control 15-5 Disablingandenablingdatadisplay 15-6 Refreshingdatadisplay 15-6 Enabling mouse, keyboard, and timerevents 15-7 Choosinghowtoorganizethedata 15-7 Displayingasinglerecord 15-7 Displayingdataaslabels 15-7 Displaying and editing fields in aneditbox 15-8 Displaying and editing text in a memocontrol 15-8 Displaying and editing graphics fields inanimagecontrol 15-9 Displaying and editing data in list and comboboxes 15-9 Handling Boolean field values with checkboxes 15-12 Restricting field values with radio controls 15-12 Displayingmultiplerecords 15-13 Viewing and editing data with TDBGrid 15-14 Using a grid control in its default state 15-15 Creatingacustomizedgrid 15-15 Understanding persistent columns 15-16 Creatingpersistentcolumns 15-16 Deletingpersistentcolumns 15-17 Arranging the order of persistent columns 15-18 Setting column properties at design time 15-18 Definingalookuplistcolumn 15-19 Puttingabuttoninacolumn 15-20 Restoring default values to a column 15-20 Displayingcompositefields 15-21 Settinggridoptions 15-22 Editing in the grid . 15-23 Controlling grid drawing. . . 15-23 Responding to user actions at runtime 15-24 Navigating and manipulating records . . . . 15-25 Choosing navigator buttons to display 15-26 Hiding and showing navigator buttonsatdesigntime 15-26 Hiding and showing navigator buttonsatruntime 15-26 Displayingfly-overhelp 15-27 Using a single navigator for multiple datasets 15-27 Chapter 16 Understanding datasets 16-1 Typesofdatasets 16-2 Openingandclosingdatasets 16-2 Determiningandsettingdatasetstates 16-3 Inactivatingadataset 16-4 Browsingadataset 16-5 Enablingdatasetediting 16-6 Enablinginsertionofnewrecords 16-7 Enablingindex-basedoperations 16-7 Calculatingfields 16-8 Filteringrecords 16-8 Applyingupdates 16-8 Navigatingdatasets 16-8 x UsingtheFirstandLastmethods 16-9 UsingtheNextandPriormethods 16-10 UsingtheMoveBymethod 16-10 UsingtheEofandBofproperties 16-10 Eof 16-11 Bof 16-11 Markingandreturningtorecords 16-12 Searchingdatasets 16-14 UsingLocate 16-14 UsingLookup 16-15 Displaying and editing a subset of data usingfilters 16-15 Enablinganddisablingfiltering 16-16 Creatingfilters 16-16 Settingfilteroptions 16-19 Navigating records in a filtered dataset 16-20 Modifyingdata 16-20 Editing records . 16-21 Addingnewrecords 16-22 Insertingrecords 16-22 Appendingrecords 16-23 Deletingrecords 16-23 Postingdatatothedatabase 16-23 Cancelingchanges 16-24 Modifyingentirerecords 16-24 Usingdatasetevents 16-25 Abortingamethod 16-26 UsingOnCalcFields 16-26 Chapter 17 Working with field components 17-1 Dynamicfieldcomponents 17-2 Persistentfieldcomponents 17-3 Creatingpersistentfields 17-4 Arrangingpersistentfields 17-5 Definingnewpersistentfields 17-5 Definingadatafield 17-6 Definingacalculatedfield 17-7 Definingalookupfield 17-8 Defininganaggregatefield 17-10 Deleting persistent field components 17-10 Setting persistent field properties andevents 17-10 Setting display and edit properties atdesigntime 17-11 Setting field component properties atruntime 17-12 Controlling and masking user input 17-12 Using default formatting for numeric, date,andtimefields 17-13 Handlingevents 17-13 Working with field component methods atruntime 17-14 Displaying, converting, and accessing fieldvalues 17-15 Displaying field component values in standardcontrols 17-15 Convertingfieldvalues 17-16 Accessing field values with the default datasetproperty 17-17 Accessing field values with a dataset’s Fieldsproperty 17-18 Accessing field values with a dataset’s FieldByNamemethod 17-18 Checkingafield’scurrentvalue 17-19 Settingadefaultvalueforafield 17-19 Specifyingconstraints 17-19 Usingobjectfields 17-20 DisplayingADTandarrayfields 17-21 WorkingwithADTfields 17-21 Using persistent field components. . . 17-22 Using the dataset’s FieldByName method 17-22 Using the dateset’s FieldValues property 17-22 Using the ADT field’s FieldValues property 17-22 Using the ADT field’s Fields property 17-23 Workingwitharrayfields 17-23 Usingpersistentfields 17-23 Using the array field’s FieldValues property 17-23 Using the array field’s Fields property 17-24 Workingwithdatasetfields 17-24 Displayingdatasetfields 17-24 Accessing data in a nested dataset 17-24 Workingwithreferencefields 17-25 Displayingreferencefields 17-25 Accessing data in a reference field . . . 17-25 [...]... 2 2-5 2 2-5 2 2-5 2 2-6 2 2-6 2 2-7 2 2-7 2 2-8 2 2-8 2 2-9 2 2-9 2 2-9 2 2-9 2 2-1 0 2 2-1 0 2 2-1 1 2 2-1 1 2 2-1 1 2 2-1 1 2 2-1 2 2 2-1 2 2 2-1 2 2 2-1 3 xiii 2 2-1 3 2 2-1 3 2 2-1 3 2 2-1 4 2 2-1 4 2 2-1 4 2 2-1 4 2 2-1 5 2 2-1 5 2 2-1 5 2 2-1 6 2 2-1 6 2 2-1 6 2 2-1 7 2 2-1 7 2 2-1 8 2 2-1 8 2 2-2 0 2 2-2 0 2 2-2 0 2 2-2 0 2 2-2 1 2 2-2 1 2 2-2 1 2 2-2 1 2 2-2 2 2 2-2 2 2 2-2 2 2 2-2 3 2 2-2 3 2 2-2 3... 4-4 0 5-4 6-1 8 6-2 2 6-2 7 6-3 3 6-3 5 7-3 7-7 8-3 8-3 8-4 8-2 3 8-2 3 9-9 1 0-2 1 0-4 1 0-7 1 0-8 1 0-1 0 1 0-1 0 xvii 1 0-1 2 1 0-1 4 1 0-1 9 1 0-2 2 1 0-2 6 1 1-2 1 1-5 1 1-1 0 1 1-1 1 1 1-1 2 1 2-4 1 2-7 1 5-2 1 5-1 9 1 5-1 9 1 5-2 1 1 5-2 2 1 5-2 4 1 5-2 5 1 6-3 1 6-9 1 6-9 1 6-1 7 1 6-1 9 1 6-2 0 1 6-2 1 1 6-2 4... 3 2-1 3 2-1 3 2-2 3 2-3 3 2-3 3 2-3 3 2-4 3 2-4 3 3-1 3 3-2 3 3-3 3 3-4 3 3-4 3 3-5 3 3-5 3 3-6 3 3-7 3 3-9 3 3-9 3 3-1 0 3 3-1 0 3 3-1 1 3 3-1 2 Chapter 34 3 1-3 Creating a graphic component 3 3-1 3 2-4 3 2-4 3 2-5 3 2-5 3 2-6 3 2-6 3 2-7 3 2-8 3 2-9 Index xvi 3 4-1 3 4-1 3 4-2 3 4-2 3 4-2 3 4-3 3 4-4 3 4-4 3 4-5 3 4-5 3 4-6 3 4-6 ... 2 4-4 2 4-4 2 4-4 2 4-5 2 4-5 2 4-5 2 4-6 2 4-6 2 4-6 2 4-6 2 4-7 2 4-7 2 4-8 2 4-8 2 4-1 0 2 4-1 0 2 4-1 0 2 4-1 1 2 4-1 2 2 4-1 3 Chapter 25 Part IV Overview of component creation 2 5-1 2 5-1 2 5-2 2 5-2 2 5-2 2 5-3 2 5-3 2 5-4 2 5-4 2 5-5 2 5-6 2 5-6 2 5-7 2 5-7 2 5-8 2 5-8 2 5-9 2 5-9 Chapter 26 2 4-1 2 4-2 2 4-2 2 4-3 Creating... changes into data Saving data to a file or stream 2 0-6 2 0-6 2 0-9 2 0-9 2 0-1 0 2 0-1 0 2 0-1 2 2 0-1 3 2 0-1 4 2 0-1 4 2 0-1 5 2 0-1 5 2 0-1 6 2 0-1 6 2 0-1 7 2 0-1 7 2 0-1 8 2 0-1 9 2 0-3 0 2 0-3 0 2 0-3 1 2 0-3 1 2 0-3 3 2 0-3 3 2 0-3 4 2 0-3 4 2 0-3 5 2 0-3 6 2 0-3 7 2 0-3 7 2 0-3 8 2 0-3 8 2 0-3 9 2 0-4 0 2 0-4 0 2 0-4 1 Chapter 21 2 0-1 9 2 0-2 0 2 0-2 0 Using provider components Determining the source of data ... connections Non-blocking connections Reading and writing events Blocking connections 2 3-1 2 3-2 2 3-2 2 3-2 2 3-2 2 3-3 2 3-3 2 3-3 2 3-3 2 3-4 2 3-4 2 3-5 2 3-5 2 3-5 2 3-6 2 3-6 2 3-6 2 3-6 2 3-6 2 3-6 2 3-7 2 3-7 2 3-7 2 3-7 2 3-7 2 3-8 2 3-8 2 3-8 2 3-8 2 3-9 2 3-9 2 3-9 2 3-1 0 Defining new classes... updates to datasets that do not represent a single table Responding to client-generated events 2 0-2 1 2 0-2 2 2 0-2 2 2 0-2 3 2 0-2 3 2 0-2 4 2 0-2 4 2 0-2 5 2 0-2 6 2 0-2 6 2 0-2 7 2 0-2 7 2 0-2 8 2 0-2 9 2 0-2 9 xii 2 1-1 2 1-2 2 1-2 2 1-3 2 1-4 2 1-4 2 1-4 2 1-6 2 1-6 2 1-7 2 1-8 2 1-8 2 1-1 0 2 1-1 0 2 1-1 0 2 1-1 1 Part III Properties that describe the content The content of HTTP... Off-screen bitmaps Creating and managing off-screen bitmaps Copying bitmapped images Responding to changes 2 6-1 3 2 6-1 4 2 7-1 2 8-1 2 8-2 2 8-2 2 8-3 2 8-3 2 8-3 2 8-4 2 8-4 2 9-1 2 9-1 2 9-2 2 9-2 2 9-3 2 9-3 2 9-4 2 9-4 2 9-5 Chapter 30 2 7-1 2 7-2 2 7-2 2 7-3 2 7-3 2 7-4 2 7-4 2 7-4 2 7-4 Making... notifications Event-specific handlers Returning information from the handler Chapter 29 2 6-1 3 Creating events 2 8-1 2 7-5 2 7-6 2 7-6 2 7-7 2 7-7 2 7-7 2 7-7 2 7-8 xv 3 0-1 3 0-1 3 0-2 3 0-2 3 0-2 3 0-3 3 0-3 3 0-3 3 0-4 3 0-4 3 0-5 3 0-6 3 0-6 3 0-7 3 0-8 3 0-9 3 0-1 0 3 0-1 0 Registering multiple... callback to monitor SQL commands 1 9-1 1 9-2 1 9-2 1 9-2 1 9-2 1 9-3 1 9-3 1 9-4 1 9-4 1 9-5 1 9-5 1 9-7 1 9-7 1 9-8 1 9-8 1 9-9 1 9-9 1 9-1 0 1 9-1 1 1 9-1 1 1 9-1 1 1 9-1 2 1 9-1 3 1 9-1 3 1 9-1 4 Chapter 20 Using client datasets Working with data using a client dataset Navigating data in client datasets Specifying the index to use for searching Executing a search . 1 0-4 10.3Changedordifferentfeatures 1 0-7 10.4UnitsinKylixandDelphi 1 0-8 10.5UnitsinKylix,notinDelphi 1 0-1 0 10.6UnitsinDelphi,notinKylix 1 0-1 0 10.7 Differences in the Linux operating environment 1 0-1 2 10.8CommonLinuxdirectories. applications to Linux . . . . 1 0-1 Portingtechniques 1 0-2 Platform-specificports 1 0-2 Cross-platformports 1 0-2 Windowsemulationports 1 0-2 Portingyourapplication 1 0-2 CLXversusVCL 1 0-4 WhatCLXdoesdifferently. multi-read exclusive-write synchronizer 9-7 Other techniques for sharing memory 9-8 Waitingforotherthreads 9-8 Waiting for a thread to finish executing 9-8 Waitingforatasktobecompleted 9-9 Executingthreadobjects