Software Development Home ^ Products ^ Services ^ Resources ^ About Us ^ Contact Us
Software Development  

Backslash - Ingenious Software Development


Domain Name
Search Software

Time Tracking Software



Laptop Computer


C++ Builder 6 Developer's Guide

C++ Builder 5 Developer's Guide



Customizing C++Builder

By: Jarrod Hollingworth, Backslash
Last Updated: 29-Aug-2002

The ULTIMATE domain name search software: Mozzle Pro
Advanced brainstorming and automatic availablility checking. Find popular, expired and expiring domain names. Six searches, dozens of features. Over 500 domains.
Developed with C++Builder, Indy and TMS Component Pack!

C++Builder can be customized in many ways. There are customizable settings such as the colors used for syntax highlighting, tools that can be added to the Tools menu, and desktop settings to name a few. There are also several ways in which you can create customized reusable elements, such as code templates and storing forms in the Object Repository. If used effectively many of these can greatly enhance your productivity.

In this article I'll introduce you to many of the customizable elements in C++Builder, several of which you may already be familiar with and hopefully some that you're not. I'll also show you the files and registry keys that store the configuration for these customizable elements. If you've ever wanted to back up your configuration or to share it with other developers then here's where you need to look!

Most of the customizable elements that I will cover here, with the exception of some of the file and registry locations, are available in the online help. This article is all about making you aware of these customizable elements, and you should refer to the online help for additional information.

NOTE: The items listed here are applicable to C++Builder 5 Enterprise. Some items are not available on other versions of C++Builder, though this information largely applies to other versions also. Use this information at your own risk. I recommend that you back up any important projects and other data before using this information.


Startup Folder

Don't like they way that C++Builder insists on loading and saving files from the default $(BCB)\Projects folder? You can set your own default folder by changing the Start In location for the shortcut that you use to run C++Builder. I run C++Builder from a shortcut that I have placed on the Windows Quickstart toolbar adjacent to the Windows Start button but this works equally well if you run C++Builder from the Start, Programs, C++Builder menu.

Windows XP and Windows 2000 users can simply right-click on the shortcut icon and then select Properties. Enter the full path of the desired default folder in the Start In edit box, ensuring that it is enclosed in double quotes "" if the path contains spaces. Select OK to save your changes.

Windows 9x/ME users who use the default shortcut from the Start menu to run C++Builder may need to edit the icon properties by customizing the Start menu (Start, Settings, Taskbar and Start Menu, Start Menu, Customize, Advanced) or by using Windows Explorer and browsing to the Programs shortcuts.


You spend a great amount of time using the IDE, so any customization that you can do in the IDE to increase productivity will pay off greatly. Throughout this section I'll show you various ways that you can customize the IDE to make life easier.

Toolbar Configuration

First and foremost you should spend a few minutes to customize the C++Builder toolbars. To do this simply right-click any toolbar and select Customize from the speed menu.

To free up some real estate you'll want to remove any toolbars, or buttons from toolbars, that you don't often use or that you readily know the keyboard shortcut for. To remove a toolbar uncheck it on the Toolbars page of the Customize dialog. To remove a button simply drag the button off the actual toolbar while the Customize dialog is displayed. There probably won't be many to remove as the standard toolbars contain buttons that are frequently used. One likely candidate is the Desktop Settings toolbar if you only normally use the one desktop setting. You may also want to remove the Save button (Ctrl-S), Toggle Form/Unit (F12), Trace Over (F8) and Trace Into (F7).

The next step is to add new buttons for menu items that you commonly use. To add buttons to existing toolbars drag them from the Commands page of the Customize dialog for the appropriate Categories. You may want to consider some of the commonly used commands shown in Table 1.

Category Commands
Database Explore
Debug Watches, Local Variables (depending on your use of desktop settings)
Edit Tab Order
File New Unit, Close All, Include Unit Header
Project Build Project, Options, Make Project
Run Program Reset, Evaluate/Modify, Inspect
Search Find in Files
View Project Manager, Window List, Alignment Palette, Next Window, ToDo List
Table 1. Commonly Used Commands

Finally, arrange the toolbars and buttons in a logical order. The goal is to minimize blank toolbar space and reduce the height of the toolbar area to leave the largest space possible for the code editor and other windows. You can even place toolbars to the right of the main menu, as the main menu is a toolbar in itself. My toolbars look something like Figure 1 (layout changed to fit this web page - in reality I place all toolbars to the right of the main menu). Of course the larger the screen resolution that you are using the more space that you have for toolbar buttons. In my view a decent sized monitor and video card that has good 2D specifications are essential for working within an IDE such as C++Builder.

Toolbar Configuration
Figure 1. Example Toolbar Configuration

Desktop Settings

C++Builder 5 introduced the concept of desktop settings, or window layout management, at a global level, whereby you can save the arrangement of the various floating windows that you use in the IDE, such as the Object Inspector, Code Editor, ToDo List, Watches view and so on. This saves you having to reposition and resize windows each time that C++Builder is started. Users of earlier versions of C++Builder can use project-level window arrangement by selecting Tools, Environment Options and checking Project Desktop in the Autosave section on the Preferences page. One advantage of the new Desktop Settings feature is that you can specify separate editing and debug layouts.

To create a desktop setting show and arrange the windows that you want. Do this for design mode windows, such as the Code Editor and Object Inspector, first. For effective window arrangement you can dock most windows into other windows, either tiled horizontally or vertically, or with each window appearing on a separate selectable tab. For horizontal or vertical docking drag one window to one of the edges of a second window. For tabbed docking drag the window to the centre of the second window. Next, select View, Desktops, Save Desktop, or click the Save Desktop button on the toolbar. Enter a descriptive name for desktop arrangement, such as "Editing General" or "Editing Components".

Perform a second set of window arrangement for debugging mode while debugging your application, closing design-time only windows such as the Object Inspector and displaying debug windows such as the Watches view, Call Stack, and Event Log. Save this new desktop arrangement with a name such as "Debug General" or "Debug Multithreaded". Set this as a debug desktop by selecting View, Desktops, Set Debug Desktop. Select the newly created desktop from the list and click OK. Finish debugging your application and revert to one of your design-time desktop settings. Now, whenever you run/debug your application the desktop will change to your selected debug layout and revert back to your seleted design-time layout when you stop your application.

IDE desktop layouts use a lot of screen space and again a high screen resolution on a large monitor with a good video card is desirable. My standard design-time desktop layout is shown in Figure 2. The object inspector and ToDo List are placed on the left with the Code Editor taking up the remaining screen space. Inside the Code Editor I have docked the Class Explorer and Project Manager. This layout has the advantage that the actual source code is displayed in the centre of the screen. This is where you spend a lot of time and this arrangement will help to reduce eye, neck and back strain.

Typical Desktop Layout
Figure 2. A Typical Design-Time Desktop Layout

You are not restricted to just one design mode or debugging mode desktop setting. You can create several desktop settings and swap between them when appropriate. You might like to set up different desktop settings depending on the type of application that you are developing. Note though that you can only have one automatic debug desktop.

Code Editor Syntax Highlighting

Take a few moments to set your own style of color settings for the Code Editor. To do this Select Tools, Editor Options and then select the Colors page. This is shown in Figure 3. Set a foreground color, background color, and font style for each code Element.

Figure 3. Syntax Highlighting Settings

I prefer a white background, with blue comments, bold black for reserved words, brown for identifiers, pink for strings, purple for numeric and character constants, and the default for other Elements.

You can preview your settings in the code snippet displayed. Ensure that Use Syntax Highlight is checked on the General page. Remember that what works for others will be different to what works for you. Comprehension of code is very important and syntax highlighting can greatly enhance it.

Code Editor Options

Perhaps one of the most crucial elements to writing comprehensible code is the use of indentation and whitespace. For indentation the Code Editor can help you maintain a consistent style.

In the Editor Options dialog, which can be accessed from the Tools, Editor Options menu item, there are several settings on the General page that adjust indentation rules. It will help if you decide on a constant indentation setting at all levels of indentation. I use 2 spaces, though some people prefer 3 or 4. The default setting of 8 is a bit much as even a few nested blocks of code will be pushed past the visible width of the Code Editor.

I recommend that you set the following options. Check Auto Indent Mode and Backspace Unindents. Uncheck Use tab character, Smart Tab, and Optimal Fill. Set Block Indent and Tab Stops to your chosen constant indentation setting. These options are shown in Figure 4.

Code Editor Options
Figure 4. Code Editor Options

You don't have to specify each individual tab stop position if you use a constant indentation at all levels, just enter the single number of spaces. If you use varying indentation settings, such as 2 spaces at the first level then 3 spaces after that, then you will need to specify the individual tab stop positions.

You may also want to set other Code Editor options such as check Undo After Save on the General page and change the Code Editor font and size on the Display page.

Form Designer

Form designer options can be set on the Preferences page of the Environment Options dialog as shown in Figure 5. To display the dialog select Tools, Environment Options. The default grid size of 8 x 8 is too chunky and a setting of 4 x 4 allows finer component positioning control. A useful setting to enable is Show Component Captions, which will display the name of non-visual components in the Form Designer. This is quite handy where you have many TTable, TQuery, TDataSource, TPopupMenu or other components on your form or data module.

Form Designer Settings
Figure 5. Form Designer Settings

I recommend that you check the New Forms As Text option, as comparing different versions of form files and viewing and editing them outside the IDE will then be possible. Saving form files as text is also handy when working with a version control system as it can be used to easily compare changes made between two versions.

Custom Tools on the Tools Menu

If you often use external applications during development then it can be convenient to add these applications to the Tools menu in C++Builder. Some likely candidates are your documentation tool, help authoring tool, installation building tool and web site ftp upload program.

To add items to the Tools menu select Tools, Configure Tools. Select Add, then enter a title for the tool that you are adding. Browse to the executable by selecting the Browse button. Modify the Working Dir and add any command line parameters if necessary. There are some handy Macros that can be inserted in the command line parameters, such as the filename of the currently selected Code Editor file, or the word at the current cursor position in the Code Editor. When you're done select OK. The tools that you add will be displayed at the bottom of the Tools menu.

File and Function Divider Line

If you don't like the standard line inserted at the top of each units cpp file or the function divider line that is used when an event handler or other function is added to your code by C++Builder then you can set your own. Using lines that stand out for you and which complement your other code comments can help to partition a unit in your head when browsing code.

Specifying a custom top line or function divider line involves editing the file $(BCB)\Bin\bcb.bcf, where $(BCB) is the folder in which C++Builder is installed. This is a text file in an INI format, so you can use Notepad, WordPad, or any other text editor. There will be no standard text editor associated with the .bcf file so you will need to select one when opening the file with Windows Explorer. Alternatively you can start your text editor and browse to the file.

To specify a custom top line in new unit cpp files add a definition for Divider Line Break within a new section named Code Formatting. To specify a custom function divider line add a definition for Divider Line. Set these definitions to the text to be used in the source code. The text should be formatted as a comment so as not to cause syntax errors in your code. The following example demonstrates these customizations.

[Code Formatting]
Divider Line Break=/* ===================== TOP LINE ===================== */
Divider Line=/* ===================== END FUNCION ===================== */

Default Project Options

If you find yourself continuously setting certain project options, such as adding Conditional Defines, enabling Version Info and entering standard values for the version Keys, or unchecking Build With Runtime Packages, then you can set these as the default for all new projects.

To set project defaults first make the necessary changes to the Project Options dialog then check the Default option at the bottom of the dialog and select OK. This option is shown in Figure 6.

Default Project Options
Figure 6. Setting Default Project Options

The project options that you have set will be used for all new projects.

Third Party Tools

There are many third party IDE customization tools available for C++Builder. Perhaps the two most prominent are GExperts and ClassExplorer Pro. A few IDE add-in tools are shown in Table 2.

Tool Vendor Description
GExperts Open Source Various wizards and IDE enhancements including a code librarian, ASCII chart, clean directories wizard and many others.
ClassExplorer Pro ToolsFactory Class designer, class searching and browsing, enhanced code templates, class documentation.
VSSConneXion Epocalipse MS Visual Source Safe integration.
Opaque Software Quick access to the component palette, definition of reusable component property settings, enhanced window list.
Designer Plus Devrace A form designer expert to assist with working with components.
IDE Inspector Dream Company View the form component heirarchy and change properties at design-time or run-time.
Table 2. Third Party IDE Tools

Take a look at what these have to offer. Some are free, some are available as inexpensive shareware and some are commercial products. For a more complete list of C++Builder tools see the Borland C++Builder Tool and Component web page.

Reusable Items

In the previous section "The IDE" I showed you how to customize the IDE to make everyday development easier. In this section I'll describe how to create customized reusable projects, code and various other items which can further increase your productivity.

The Object Repository

The Object Repository allows you to save custom forms, datamodules, and projects to a central repository. The items that you save to the repository can be used again for other projects. As an example, to assist you with maintaining a consistent look and feel throughout your project you could add a base form containing a main menu with particular standard menu items, a toolbar with standard buttons, and a status bar to the Object Repository. For each new form that you create in the project you can use this base form in the Object Repository as a starting point.

To add an entire project to the Object Repository select Project, Add To Repository. To add a form or datamodule to the Object Repository select Add to Repository from the context menu in the Form Designer or Datamodule Designer. Note that the project files for the items added to the Object Repository are located wherever they are currently saved and not stored within the Object Repository. The Object Repository is really just a text file containing references to these files and details about them.

If you have added a project or form to the Object Repository then you can set these as the defaults to use when creating a new application or new form. To do this select Tools, Repository. Select the page on which you previously added the project or form to from the Pages list and then select the project or form from the Objects list. Check the New Project, New Form, or Main Form options to use it as the default project, form or main form in a new project. Finally, select OK. Select File, New Application or File, New Form to test your new default items.

You should become familiar with how to use the Object Repository and how to reuse the items stored within it, particularly with forms and datamodules where you will need to know the differences between the Copy, Inherit and Use options and their implications. You should also plan the design of your standard project, form or datamodule carefully to maximize reusability. Consult the C++Builder online help for more information.

If you work in a team environment then you can place the custom Object Repository definition file, bcb.dro, on a network server, allowing each developer to use the same object repository items. Point C++Builder to this object repository file through the Preferences page of the Tools, Environment Options dialog as shown in Figure 7.

Shared Object Repository
Figure 7. Defining a Shared Object Repository

All custom items added to the object repository should also be stored on the network server (usually in a set of sub-folders within a common repository folder), ensuring that the path to the items is the same and is accessible for all developers.

C++Builder Code Templates

Code templates are a fantastic way to speed up your code editing. A code template is a pre-defined snippet of code that can be automatically inserted into the Code Editor by typing a short name for the code template and pressing the insert code template key combination (normally <ctrl>j). The short name entered is replaced with the code configured for the code template. If the short name entered is not unique then a list of matching code templates is presented for you to select from.

Code templates are configured from the Code Insight page of the Tools, Editor Options dialog. C++Builder has several code templates defined. You can delete and edit the existing code templates and add your own.

To add a new code template select Add, give the code template a Short Name and a good short Description. Next, add the code for the template in the Code field. To specify the location of the edit cursor after the insertion of the code template add a pipe '|' symbol to the code. This is shown in Figure 8.

Code Templates
Figure 8. Adding Code Templates

You should think carefully about the Short Name for the code template. It should be as short as possible and unique, but not too short that it will cause conflicts in the future. You should avoid having a Short Name that begins with another Short Name. For example, don't add a code template with the Short Name "tr" and another code template with the Short Name "try", as you won't be able to automatically insert the code template for the "tr" Short Name.

In general you should define a code template for the common code elements that you use, such as "ife" for an "if (|) { } else { }" block, "tf" for a "try { | } __finally { }" block, common variable types such as "ts" for "TStringList* |;", and other common or hard to type code such as "dc" for "dynamic_cast<|>()".

Menu Templates

A menu template is a list of custom menu items. When creating a menu you can save it as a template to use in other projects. Several pre-defined menu templates are provided by C++Builder, including File, Edit, Window, and Help menus.

To create a custom menu template you must first design the menu using the Menu Designer. If you want to save an entire set of menus then design them all, however if you only want to save a single menu or sub-menu then only design that menu. To save the menu select Save As Template from the Menu Designer context menu. Give the menu a descriptive name.

To insert a custom menu template in a menu select the position in the Menu Designer at which the menu is to be inserted and then select Insert From Template from the context menu. Select the menu template and select OK.

Component Templates

A component template is a single or group of regular components with customized property settings. Component templates are great if you often use a component or group of components with the same property settings. For example, you might commonly add an OK, Cancel, and Help button to your forms, or use a toolbar with toolbar buttons linked to common actions in an action list. The toolbar and action list might be linked to an image list and each action in the action list assigned images from the image list. These are candidates for component templates. If there are many components in your component template and the components are applicable to the form as a whole then you might want to consider storing the form in the Object Repository instead of using a component template.

To create a component template drop the component(s) on a form and set their properties via the object inspector. Next, select the component(s). If there are multiple components then you will need to shift-click or lasso to multi-select them. Next, select Component, Create Component Template. The component template dialog is shown in Figure 9. Give the component template a valid type name and select the Component Palette page on which to add the component template. You can also define an image for the component template. Finally, select OK.

Component Template Dialog
Figure 9. Component Template Dialog

To use the component template simply select it from the Component Palette and drop it on your form.

Edit Masks

Edit masks are used with the TMaskEdit component and TField objects for datasets. An edit mask allows you to control the display and entry of data in a specific format in a TEdit-like control. An example of the formatting is a phone number with dashes at specific places and optional and mandatory digits.

The EditMask property of TMaskEdit and TField has a property editor that allows you to enter and test an edit mask. It also allows you to load an edit mask file containing a list of related edit masks and select one to use instead of creating your own. The EditMask prperty editor is shown in Figure 10.

EditMask Property Editor
Figure 10. EditMask Property Editor

C++Builder provides standard edit mask files for common data types such as phone numbers, zip codes, dates and so on for a variety of countries. You can create your own edit masks, they do not need to be country-based, and save them in a file for later use.

To create your own edit mask list simply create a new text file. Add one line to the file for each edit mask. Each edit mask line is in the following format:

Name | Example | Edit Mask

Name is a descriptive name for the edit mask, Example is an example of how the data will be dislayed and edited. Both Name and Example will be displayed in the EditMask property editor. Edit Mask is the actual formatting characters that define the edit mask. You can add as many edit masks to the file as you like. Once you have entered your edit masks save the file in the $(BCB)\Bin folder with a .dem extension. Your edit mask list can now be loaded from by selecting the Masks button in the edit mask property editor for the TMaskEdit or TField.

Translation Manager Repository

If you create applications for localized markets then you will probably use the Translation Manager, one of the tools in the Integrated Translation Environment, to manage the translation of the various strings in your application to localized languages. During translation of the strings you can save them to a repository for reuse. If in the next application you use the same string then you can reload the previously translated string for it from the repository. You can even enable the Auto Translate option to search for previous translations of the same strings.

See Integrated Translation Environment in the C++Builder online help contents for more information.

Files and Registry Keys

In this section I will list the files and registry keys used to store the configuration items listed in the previous sections. Make a backup copy of them to enable you to restore your C++Builder configuration after a re-install or when moving PC's. Files and registry keys listed as Shareable can generally be given to other developers so that they can use the same configuration settings.

In most cases you should install saved settings only after reinstalling C++Builder and all third-party IDE enhancements.


There are several files used to store configuration items. All files are stored in the $(BCB)\Bin folder, where the symbol $(BCB) is the folder in which C++Builder is installed, for example C:\Program Files\Borland\CBuilder5. All users on the PC share these configuration files. A list of the common configuration files are shown in Table 3.

Configuration Item Filename Description
Code Templates
$(BCB)\Bin\bcb.dci Text format (INI). Editable and shareable.
Desktop Settings $(BCB)\Bin\*.dst Text format (INI). Not generally editable. Shareable.
Default Project
$(BCB)\Bin\default.bpr Text format (XML). Not generally editable. Shareable.
Default Package
$(BCB)\Bin\default.bpk Text format (XML). Not generally editable. Shareable.
Custom Object
Repository Items

Text format (INI). Not generally editable. Shareable. See the previous Object Repository section for details about how to share the items in the object repository.

Menu Templates $(BCB)\Bin\bcb.dmt Binary format. Not editable. Shareable.
$(BCB)\Bin\C++Builder.dct Binary format. Not editable. Shareable.
Function Divider
$(BCB)\Bin\bcb.bcf Text format (INI). Editable. Shareable. This file also contains C++Builder standard variable type translations.
Edit Masks $(BCB)\Bin\*.dem Text format. Editable. Shareable. Several edit mask files are provided with C++Builder. You only need to back up the edit mask files that you have created or modified.
Translation Manager
$(BCB)\Bin\default.rps Binary format. Not editable. Shareable. This is the default Translation Manager Repository filename, however you may have saved this file using a different filename.
Table 3. Configuration Files

The easiest way to identify the configuration files that you have changed is to browse to the $(BCB)\Bin folder using Windows Explorer. Next, select View, Details and then sort the files in most recently modified first order by clicking the Modified column heading twice. The resulting view will be similar to that shown in Figure 11.

Configuration Files
Figure 11. Modified Configuration Files

All recently modified files will be listed together.

To save the configuration files simply add them to your backup procedure or copy them to another folder that is already included in your backup procedure.

To load the configuration files firstly make sure that C++Builder is not running. Copy the settings files to the $(BCB)\Bin folder and start C++Builder.

Registry Keys

There are many configuration items stored in the registry. Most of these are stored under the $(HKCU)\(BCB5) registry key branch. Each user on the PC has their own registry configuration options. The registry key branch symbols used in this section are listed in Table 4.

Symbol Registry Key Branch
$(BCB5) Software\Borland\C++Builder\5.0
$(TOOLSF5) Software\toolsfactory\ClassExplorer Pro\C++ Builder 5.0
$(HKCU)\$(BCB5) HKEY_CURRENT_USER\Software\Borland\C++Builder\5.0
$(HKCU)\$(TOOLSF5) HKEY_CURRENT_USER\Software\toolsfactory\ClassExplorer Pro\
C++ Builder 5.0
Table 4. Registry Key Branches

The registry keys for common configuration options are shown in Table 5. Some options for the third-party IDE add-in ClassExplorer Pro are also shown in this table. There are several other registry keys not shown here which are also listed under $(HKCU)\$(BCB5) which you may also need to back up.

Configuration Item Registry Key Description
Code Editor
Syntax Highlighting
$(HKCU)\$(BCB5)\Editor\Highlight Shareable.
Code Editor
$(HKCU)\$(BCB5)\Editor\Options Shareable.
Form Designer $(HKCU)\$(BCB5)\Form Design Shareable.
Toolbar Configuration $(HKCU)\$(BCB5)\Toolbars Not generally shareable.
Code Insight $(HKCU)\$(BCB5)\Code Insight Shareable.
Compiling Options $(HKCU)\$(BCB5)\Compiling Shareable.
Debugging Options $(HKCU)\$(BCB5)\Debugging Shareable.

ToDo List

$(HKCU)\$(BCB5)\ToDo List Shareable.

Custom Tools on the
Tools Menu

$(HKCU)\$(BCB5)\Transfer Not generally shareable.

ClassExplorer Pro
Code Templates

$(HKCU)\$(TOOLSF5)\C++ Code Templates Shareable.
ClassExplorer Pro
Code Generation
$(HKCU)\$(TOOLSF5)\CodeGeneration Shareable.
Table 5. Configuration Registry Keys

To save all registry settings for a particular registry key use the Windows Registry Editor. The Windows Registry Editor is named regedit on all versions of Windows, however Windows NT and Windows 2000 also provide the regedt32 registry editor as well. To run the Windows Registry Editor select Start, Run, enter the name of the Windows Registry Editor and select OK. This is shown in Figure 12.

Starting Windows Registry Editor
Figure 12. Running Windows Registry Editor

To save the registry settings browse to the appropriate registry key then select File, Export Registry File, as shown in Figure 13. Browse to an appropriate folder and enter an appropriate filename. This will save a .reg file containing the registry settings in the selected key.

Exporting Registry File
Figure 13. Exporting a Registry File

Note that although most configuration options are stored in sub-keys of the $(HKCU)\$(BCB5) registry key it is not a good idea to simply save the entire $(HKCU)\$(BCB5) key, as it also contains other options which should not be overwritten when restoring configuration settings.

To load registry settings simply double-click the exported .reg file in Windows Explorer or run the Windows Registry Editor and select File, Import Registry File.


I hope that this article has opened your eyes to some simple possibilities for customizing C++Builder, making it even easier to work with and increasing your productivity.

If you think that there are other configuration items, files, or registry keys that should be included here or you have any code templates, menu templates, component templates, or edit masks that would be useful to others then please let me know. I will consider updating this page and adding any files for others to download.

Jarrod Hollingworth

Change Log

Date Description
  • Added the General/Startup Folder section.
  • Added Divider Line Break setting in bcb.bcf. Thanks to Richard Albury.
  • Changed table formatting so that they display correctly when using the Opera browser.
Copyright © 2006 Backslash. All Rights Reserved. ^ Privacy Policy ^ Top