Copyright: Copyright © 1996 Sybase, Inc. and its subsidiaries. All rights reserved.   Tue Oct 15 16:58:13 1996


Optima++ 1.5 Read Me First Information
Optima++ Test Drive Edition Read Me First Information

Welcome to Optima++ 1.5! We hope that you enjoy using this promotional copy of Optima++, which lets you explore all of the exciting features of Optima++ Developer 1.5. Although no features are disabled in this version, applications created with the Test Drive Edition cannot be distributed or used in production. The file LICENSE.TXT in the root directory of the installation CD-ROM outlines all licensing details about the Test Drive Edition. To purchase a copy of Optima++, or for more information about Powersoft products, call your local sales representative or contact us:

•	Sales information center: (800) 395-3525 in North America

•	Main phone: 1-508-287-1500

•	Internet: www.powersoft.com.

Excluding the items listed below, the Test Drive Edition is identical to Optima++ Developer. You have access to every design time feature included in the Developer version of Optima++. The differences between the Test Drive Edition and Developer version of Optima++ are:

•	When you purchase any copy of Optima++, you MUST uninstall the Test Drive Edition first before installing the release version of Optima++. To uninstall the Test Drive Edition, double-click the Uninstall icon in the Powersoft Optima++ program group. Uninstalling will not delete any projects or files that you created under the Optima directory structure. Projects created in the 1.5 Test Drive Edition will load correctly in any release version of Optima++ 1.5.

•	A copy of the "Optima ++: Top Ten Highlights" CD-ROM is included with the Test Drive Edition. Run the OPTIMA32.EXE program in the TOPTEN folder of the installation CD-ROM. This program is an interactive multimedia presentation describing some of the exciting features of Optima++.

•	Applications created with the Test Drive Edition cannot be distributed or used in production. If you run your application outside of Optima++, an information dialog is displayed when your program starts which prevents you from continuing for 10 seconds. The program will run normally after the initial dialog is closed.

•	Since you cannot distribute applications with the Test Drive Edition, the Runtime Deployer, REDIST folder, and WIN32s folder are not included. Ignore all references to these components in the online manuals.

•	The Test Drive Edition license is displayed each time Optima++ is started.

•	No printed documentation is included with the Test Drive Edition. The same online help files are provided, but all references to printed material should be ignored.

•	Technical support is available on a pay per use basis. Free technical support is not provided with the Test Drive Edition.

•	A series of educational tutorials for Optima++ has been included in the COURSE folder of the installation CD-ROM. These documents are in Microsoft Word format.

These topics provide late-breaking information on Optima++ and tips to help you use Optima++ effectively.

All company and product names used herein may be the trademarks or registered trademarks of their respective companies.

 The Optima++ family

 Installing and uninstalling

 What’s new

 Tips

 Known problems

 Updates to the Programmer’s Guide

 Getting technical support


The Optima++ family
 Optima++ 1.5 Read Me First Information
The Optima++ family

Take the next step for even more power, performance and productivity.

Welcome to Optima++™ - the first RAD tool to combine the power and performance of the industry-standard C++ language with the productivity of a component-based development environment. And best of all, when your development needs grow, you can scale up to the Optima++ Professional and Enterprise editions for advanced teamwork, Internet development, and enterprise-level deployment.

Optima++ Developer targets the individual programmer with a component based RAD C++ environment built to deliver high-performance client/server applications.

Optima++ Professional supports development teams involved in client/server and Internet development. It includes all the power of Optima++ Developer, plus the patented Powersoft DataWindow™ for fast and efficient presentation of data; an integrated check-in/check-out facility with interfaces to popular version control systems; a multi-user Sybase® SQL Anywhere™ server for building and testing multi-user applications; and a comprehensive collection of sophisticated Internet controls for creating Internet-enabled applications and custom application servers.

Optima++ Enterprise maximizes the productivity of development teams creating enterprise-level client/server and Internet applications. It includes everything in Optima++ Professional plus high-performance native drivers for Sybase SQL Server™, Oracle, Informix, Microsoft SQL Server, and more. Also included are ObjectCycle™, Powersoft’s server-based object management repository for versioning, labeling, and reporting in a team setting; and InfoMaker™, the powerful reporting and analysis tool.

“Optima++ represents a breakthrough in visual programming not only for C++ developers, but for all users of fourth-generation language (4GL) client-server development tools.”

Rich Levin, InformationWeek, February 5, 1996

“By matching or beating its rapid application development competitors in their own strongest suits, Optima++ will attract many developers who had previously dismissed all RAD tools as second-rate.”

Peter Coffee, PC Week, June 10, 1996

“A RAD tool that aces the competition.”

Peter Coffee, PC Week, June 10, 1996

Enjoy Optima++. And when you’re ready to take the next step in client/server and Internet development, visit our Web site at www.powersoft.com or call us at 1-800-395-3525 for more details on the rest of the Optima++ family.

Outside North America call 1-508-287-1500 or contact your local Powersoft representative.

Features	D	P	E
Component-based RAD C++ environment
Drag-and-drop programming
Dynamically generated wizards
Industry-standard language: C++
Optimizing 32-bit native-code compiler
Exceptionally tight, fast code
Complete suite of Windows 95 controls
Over 150 components and classes
Create reusable DLLs, LIBs, and standalone EXEs
Powerful, seamless ActiveX component integration
Seamless highlighting editor with regular expression searching
Background compilation
Incremental linking for fast builds
Robust, just-in-time debugging
Memory tracking and library assertions
Support for building multi-threaded applications
Extensive online and printed documentation
Powerful, data-aware, native controls
Direct connection to ODBC drivers for peak performance
ODBC drivers for desktop DBMSs and Sybase® SQL Anywhere™ server
Built-in, standalone Sybase SQL Anywhere DBMS
Royalty-free Sybase SQL Anywhere restricted runtime engine for deployment
Visual Query Builder automatically creates SQL statements
DataWindow™ component and DataWindow Builder for data access, analysis, presentation, and reporting
Data Pipeline data migration utility
Three-user Sybase SQL Anywhere server to build and test true multi-user applications
Over 220 components & classes
Team programming interface
Build custom application servers using CGI, NSAPI, and ISAPI
Components for Internet protocols and services
Create and deploy Internet-enabled applications
IntallShield™ Express Custom Edition for Powersoft Optima++ (developed and supplied by InstallShield Corporation + 1-847-240-9111 e-mail: info@installshield.com)
Versions of Visual Components™ including spreadsheet and charting components
Highly optimized native drivers for Sybase® SQL Server™, Oracle, Informix, Microsoft SQL Server and MDI Database Gateway interface for DB2
ObjectCycle version control tool
InfoMaker™ query and reporting tool

D = Developer, P = Professional, E = Enterprise


Installing and uninstalling
 Optima++ 1.5 Read Me First Information
  Installing and uninstalling

These topics provide more information on installing and uninstalling Optima++.

 Installing and using Optima++ on Windows NT

 Ensuring that you have sufficient disk space

 Upgrading from earlier versions

 You must update SQL Anywhere

 Installing InfoMaker after Optima++

 Uninstalling Optima++


Installing and using Optima++ on Windows NT
 Optima++ 1.5 Read Me First Information
   Installing and uninstalling
    Installing and using Optima++ on Windows NT

Optima++ requires NT 3.51 with Service Pack 3 or higher (beta versions are not supported), or NT 4.0.

User permissions

You must have administrator permissions to install Optima++ on Windows NT. If you install Optima++ without rights to update the registry, the OLE controls will not be installed correctly and will not show up on the component palette.

Note that you also need administrator privileges under NT in order to register other OLE controls.

If you run Optima++ under NT from an account that does not have full access to the registry then Optima++ will run but you will encounter problems because it is unable to access the registry. The most common problem will be getting these errors when you build a project:

Option requires a path

Processing command line switch -rod=

♦	To solve these problems

1.	Log on from an account with administrator permissions.

2.	Open the Registry editor.

3.	Select the key HKEY_LOCAL_MACHINE\Software\Powersoft

4.	Choose Permissions from the Security menu.

5.	Grant Full Control of that folder to the Users group.

This should allow Optima++ to run from any account on the machine.

Incompatible sample

The “Memory Viewer” sample program is designed for Windows 95, and is not compatible with Windows NT.


Ensuring that you have sufficient disk space
 Optima++ 1.5 Read Me First Information
   Installing and uninstalling
    Ensuring that you have sufficient disk space

Make sure you that have sufficient disk space to install Optima++.

For Optima++ 1.5 Developer, you should have at least 100 MB free disk space before a full installation. (More disk space might be needed if your disk is partitioned to have disk allocation units larger than 16 KB.)

For Optima++ 1.5 Professional, you should have 400 MB free disk space before a full installation of all included software. A default Optima++-only installation, which excludes the Win32 SDK, should require no more than 175 MB.

For Optima++ 1.5 Enterprise, you should 460 MB free disk space before a full installation of all included software. A default Optima++-only installation, which excludes the Win32 SDK, should require no more than 185 MB.

In addition, you should have at least 40 MB available for your Windows swap drive, for Optima++ to operate efficiently.


Upgrading from earlier versions
 Optima++ 1.5 Read Me First Information
   Installing and uninstalling
    Upgrading from earlier versions

If you have used a earlier version of Optima++, then it is recommended that you perform the following steps before installing version 1.5:

•	Move any project directories that you wish to keep and any other files you created in the Optima++ and SQL Anywhere directories.

•	Uninstall the earlier version of Optima++: in the Powersoft Optima++ program group, double-click the Uninstall icon.

•	You should delete the old Optima++ directories (including the SQL Anywhere directories), if they still exist, before installing version 1.5.

•	Projects created with Optima++ 1.0, 1.0.01 or 1.1 will be automatically converted when loaded under Optima++ 1.5. Once the project is saved under Optima++ 1.5 it will no longer be compatible with the earlier version.

•	Note that this version Optima++ incorporates all fixes included with the 1.0.01 patch as well as all other fixes to version 1.0 and 1.1 that were made publicly available prior to this release. Fixes that were made available for Optima++ 1.0 or 1.1 should not be applied to this release.


You must update SQL Anywhere
 Optima++ 1.5 Read Me First Information
   Installing and uninstalling
    You must update SQL Anywhere

This version of Optima++ includes Sybase SQL Anywhere 5.0.03 Build #884.

If you have an earlier version of SQL Anywhere (including those from earlier versions of Optima++), you must install the version included with Optima++.


Installing InfoMaker after Optima++
 Optima++ 1.5 Read Me First Information
   Installing and uninstalling
    Installing InfoMaker after Optima++

Optima++ Enterprise includes a version of Powersoft InfoMaker. Both Optima++ and InfoMaker contain the same version of SQL Anywhere, but the Optima++ version contains one DLL (wod50t.dll) which is slightly newer than the InfoMaker version. Therefore, if you install InfoMaker after Optima++, you must make sure that the old InfoMaker version of the DLL does not copy over the newer Optima++ version, or you must copy a saved version of the newer DLL over the older one installed by Infomaker. The Optima++ installation saves a second copy of the newer DLL, called wod50t.bak,in the WIN32 subfolder under the SQL Anywhere 5.0 installation directory.

One way to do this is to prevent the InfoMaker installation procedure from installing SQL Anywhere; Optima++ has already installed SQL Anywhere, so you don’t need to install it twice.

Another approach is to follow these steps:

1.	Perform the InfoMaker installation. Since there is a copy of the newer DLL, you can install the InfoMaker SQL Anywhere over the Optima++ SQL Anywhere to save space.

2.	After InfoMaker has been installed, copy the newer DLL (wod50t.bak) over the older one (wod50t.dll).

Note that you must do this, even if you install InfoMaker by clicking the Install InfoMaker icon in the Optima++ folder.

The file sizes and dates for the two versions of wod50t.dll are:

InfoMaker	wod50t.dll	120,344 bytes	06/15/96	01:00p
Optima++	wod50t.dll	121,344 bytes	08/14/96	11:14a


Uninstalling Optima++
 Optima++ 1.5 Read Me First Information
   Installing and uninstalling
    Uninstalling Optima++

Follow these steps to remove Optima++ from your system.

1.	In the Powersoft Optima++ 1.5 program group, double-click the Uninstall icon.

2.	During the uninstall process, you may be asked if you want to remove some shared system DLL files. Unless you know that another program needs those files, you should let the uninstall program delete them.

3.	If you have saved projects under the Optima++ folder, the uninstall program will not delete them. However it will copy over the sample projects if you reinstall the samples. If you have made changes to the sample projects, save the files in the projects to different locations to avoid losing your changes.

4.	You may need to remove some files under your Optima++ folder to completely remove Optima++ from your system. The uninstall program can miss some files that are generated by Optima++ when it is running.


What's new
 Optima++ 1.5 Read Me First Information
  What’s new

This section describes new features and problems fixed in Optima++ since version 1.0.

 New features

 Changes and fixes between version 1.5 and 1.1

 Changes and fixes between version 1.1 and 1.0


New features
 Optima++ 1.5 Read Me First Information
   What’s new
    New features

The following are the principal new features of Optima++ 1.5.

New native controls

Optima++ 1.5 offers two new native controls which may be placed on forms:

Masked text boxes
A type of text box that can have an associated input format and output format. The input format prompts the user to enter certain types of data; for example, if the box is supposed to hold a phone number, the input format might specify:

(###)###-####

As the user types in digits, they are filled into the # placeholders. If the user types a non-digit, it is not accepted.

The output format controls how data is displayed in the box once it has been entered. For example, the box might accept numeric input in any form, but then format the input into a dollars-and-cents format. There are also output formats for dates and times; this means that the user can enter a date or time in any convenient format, after which the box automatically converts the date/time into a standard format.

Grid controls
A grid of data cells arranged in rows and columns (reminiscent of a spreadsheet). Each row and/or column may have a heading. Grid controls are particularly useful for displaying tabular data obtained from databases.

These controls are documented in chapter 5 of the Optima++ Programmer's Guide and in the online Optima++ Component Library Reference.

Internet support

Optima++ 1.5 Professional and Enterprise offer several types of Internet support:

Web server interfaces
Optima++ programs can interface with web servers using one of CGI, NSAPI, or ISAPI. If you want to have different versions of the same application for the different interfaces, most of the code can be common.

Note that to build an NSAPI extension DLL, you must first have a copy of Netscape Server. For help on creating NSAPI targets, please refer to the file INSTALL.HTM in the Template\Targets\Netscape WWW Server DLL subfolder of your Optima++ installation folder.

Windows sockets
Optima++ 1.5 introduces socket classes which provide access to WINSOCK and WINSOCK32 library services. This means that users will be able to establish Internet socket connections between different applications on different systems.

These features are documented in chapter 11 of the Optima++ Programmer's Guide and in the online Optima++ Component Library Reference.

NetManage NEWT IntraNet Toolkit
Networking components from NetManage that allow you to create applications which incorporate: WinSock (TCP and UDP), FTP, SMTP, NNTP, HTML, POP3 and HTTP.

You can access the online documentation for these from the contents tab of the Optima++ Master Help.

Powersoft DataWindow control

The Powersoft DataWindow for ActiveX is included with Optima++ Professional and Enterprise. DataWindows make it simple to present database information in a clean and easy-to-read format.

To use a data window, you place a data window object on a form and set properties to associate the data window with a transaction object. Then you invoke the Powersoft DataWindow Builder via Edit on the Powersoft DataWindow Control context menu. Use the DataWindow Builder to specify the data that the data window extracts from the database and the way in which the data window displays that data.

Once you have built the data window, you can just run the Optima++ application. The data window displays the desired information in the format specified with the DataWindow Builder.

Chapter 10 of the Optima++ Programmer’s Guide explains how to incorporate DataWindow controls in your Optima++ projects and how to use Optima++ to invoke the DataWindow Builder. The printed DataWindow guides are available online and further reference and usage information is provided in online help for the DataWindow Builder and DataWindow for ActiveX. You can access this help from the contents tab of the Optima++ Master Help.

Applications that use the DataWindow for ActiveX cannot be deployed under Win32s.

Native database drivers

Optima++ Enterprise includes native database drivers that can be used with the DataWindow. These are the same native drivers as in PowerBuilder 5.0 Enterprise and can be used with the following databases: Informix, MDI Database Gateway Interface for DB2, Microsoft SQL Server 6.0, Oracle, SQL Server 4.x, Sybase Net-Gateway Interface for DB2, Sybase SQL Server 10 & 11. Note that for DB2 and Microsoft SQL Server 6.0, the use of ODBC drivers is recommended.

These drivers are documented in the online DataWindow Builder Connection Reference. You can access this help from the contents tab of the Optima++ Master Help.

More ODBC drivers

Optima++ Professional and Enterprise include INTERSOLV DataDirect ODBC drivers for: DB2/2, INFORMIX, INGRES, MDI, Oracle 7, SQLBase, SQL Server, Sybase System 10. These are in addition to the flat-file drivers included with Optima++ Developer.

You can access the online documentation for these from the contents tab of the Optima++ Master Help.

VCI Lite components

Optima++ Professional and Enterprise include ‘lite’ versions of four powerful and popular controls from Visual Components.

Formula One	Powerful spreadsheet ActiveX control.

Formula One/NET	Spreadsheet plug-in for Web browsers (Netscape 2 compatible).

First Impression 	Photo-realistic charting ActiveX control.

VisualSpeller	Encapsulated spell checking ActiveX control.

You can access the online documentation for all but Formula One/NET from the contents tab of the Optima++ Master Help.

Formula One/NET is not fully installed in the Optima++ installation; it just adds two self-extracting archive files (ZIP format) to the Component Gallery 1.0 folder. Run F1NET32S.EXE in a temporary folder to extract the Formula One/NET setup program and files and run F1NET32H.EXE to extract the online documentation. Run the setup program to configure Formula One/NET for your Web browser.

Revision control support

Optima++ 1.5 Professional and Enterprise can interface with revision control systems, including:

•	INTERSOLV PVCS (version 5.1 and later, except that PVCS 5.1.1 does not support long file names, so it is not fully compatible with Optima++)

•	MKS RCS (version 6.2 and later)

•	MKS Source Integrity (version 3.2 and later)

•	Any system that supports the Microsoft Source Code Control (SCC) interface. These include Microsoft Visual SourceSafe (version 4.0 and later) and MKS Source Integrity (version 7.2).

•	ObjectCycle (version 1.0 and later)

The interface allows users to check files in and out, and to refresh existing files, all within the Optima++ development environment.

This capability is documented in chapter 2 of the online Programmer's Guide.

Revision control

Optima++ Enterprise includes Powersoft ObjectCycle in the package. ObjectCycle is a server-based version control product. ObjectCycle provides rapid naming, storage, and versioning in an application development team setting.

To install ObjectCycle, select the "Install ObjectCycle" icon from the Powersoft Optima++ folder.

InfoMaker

Optima++ Enterprise includes Powersoft InfoMaker in the package. InfoMaker is a complete personal data access, management, and reporting tool for developers and end users. InfoMaker allows you to create presentation-quality reports and powerful queries without the complexities of programming.

To install Infomaker, select the "Install Infomaker" icon from the Powersoft Optima++ folder.

Installation program kit

Optima++ 1.5 Professional and Enterprise include InstallShield Express Optima++ 1.5 Edition. InstallShield Express allows you to easily create professional installation programs for your Optima++ applications.

To install InstallShield Express, select the "Install InstallShield Express" icon from the Powersoft Optima++ folder.

Win32 SDK

Optima++ Professional and Enterprise include the Microsoft Win32 Software Developer’s Kit. This includes header files, library files and tools for programming directly to the Win32 API. One of the included tools is the Microsoft Help Workshop which can be used to create online help files. The kit also includes an online version of The Windows Interface Guidelines for Software Design.

The Win32 SDK is not installed in default installations, since it requires over 100 MB. Install it if you want to use the Win32 API, the online style guide, the Microsoft Help Workshop, or other Win32 SDK tools. (You can save about 45 MB of disk space if you choose the option to not install the MAPI parts of the Win32 SDK.)

Master/detail views

Optima++ now makes it easier to create database master/detail views, since the Target wizard for creating Database dialogs will walk you through the creation of a master/detail view as well as a single query form.

OLE licensing

OLE licensing is now supported.

Other new features

•	Optima++ Professional and Enterprise allow detailed setting of compiler optimizations on a per file basis.

•	The OLE Component Wizard now allows you to specify the name of the page of the component palette where you want to place the new OLE component. This can be an existing page or a new user-defined page. The OLE Component Wizard also lets you select more than one type of library so that you can generate all your OLE components at once.

•	You can now associate custom classes and header files with objects. This lets you customize component behavior, such as adding business practices code, and easily maintain and reuse the customization. See chapter 3 of the online Optima++ Programmer's Guide for more information.


Changes and fixes between version 1.5 and 1.1
 Optima++ 1.5 Read Me First Information
   What’s new
    Changes and fixes between version 1.5 and 1.1

The following describes miscellaneous new features (not mentioned in New features) and problems fixed in Optima++ since version 1.1.

•	The Remove OLE Component dialog box now lets you remove multiple components at once.

•	Optimized project loading: If you close a project after closing a view window, that window will no longer be created the next time you load the project. Previously, the window was created, but invisible.

•	Optimized the code that updates information for a given file (this is called every time a file gets built if the Files window is open.)

•	Enhanced the object inspector so that pressing F1 brings up help on the selected property or event.

•	Enhanced the Form Wizard so that pressing F1 now opens help on the active object.  If none are selected, help on the form is displayed.

•	Optimized the saving of resource (WXR) files. Previously, it was saved out whenever the target (WXT) file had to be saved. Now, the WXR file is now saved only as required.

•	Optimized the saving of the user settings (WXU) file so that it is now written out only when you explicitly save your projects. It used to be written out every time Optima++ checkpointed your project files. This should speed up the edit-build-run turnaround time somewhat.

•	Optimized the saving of target (WXT) files.  Previously they would be saved when any of the files in the target needed saving. Now it saves the target file only when required.

•	Enhanced the object inspector so that the DBMSName property now has a drop down.

•	Made a change so that picking an icon for a form now sets both small and large sizes.

•	Added a parameter to WRegistry::Open to specify the type of access. Now read-only registry keys can be opened.

•	Modified the database form wizard so that the query is generated using WCLLocking as the concurrency level.

•	Added error messages if there are errors loading or saving managed classes.

•	Enhanced the setup program to recognize user's previous installed version of Optima++ and extract information from it, for example the user name, company name and all the install paths.

•	Updated Animation sample so that the text in the about box was updated and the form is now resizable.

•	Updated Combo box sample so that it uses the proper icon.

•	Updated Dialog Hooks sample: The sample now works under Windows NT. Previously, the "customized" file open dialog was not customized at all.

•	Updated Debugging sample: The TimeFunction() class now uses WTimer::GetTickCount() rather than the less accurate clock() function.

•	Updated MDI sample: Fixed a memory leak if you closed the program while multiple child windows were still around. Also fixed the caption text of the child windows to be ever increasing ("Child 1", "Child 2", etc.) even if you close one of the lower numbered windows.

•	The following topics have been added to Optima++ Component Library Reference since Optima++ 1.0:

Accept method	AddressFamily property	Asynchronous property	AutoTab property	BINARY property	BIT property	BOOKMARK property	BSearch method	BytesWaiting property	CHAR property	ColumnTitle property	CopyOnWrite method	CreateComboBoxEditor method	CreateMaskedTextBoxEditor method	CreateTextBoxEditor method	CurrentOffset property	CursorCommitBehavior property	CursorRollbackBehavior property	DataAutoHeaders property	DatabaseError event	DATE property	DateOrder property	DefaultColumnWidth property	DefaultCompare method	DefaultRowHeight property	DeferResizePercentages property	DeleteAllColumns method	DeleteAllRows method	DeleteRow method	Description property	DisplayAsDefault property	DisplayName property	DOUBLE property	DrawMode property	DummyValue property	Editor property	EnableScrollBar method	EnsureRowIsVisible method	ErrorLogFile property	ErrorString method	EXTENSION_CONTROL_BLOCK struct	ExtensionBlock property	FetchedRows property	FLOAT property	FontDisp property	FormatString method	FormattedText property	FormVariable property	FormVariableCount property	FormVariableList property	FullRowSelection property	Grid component	GUID property	HelpContext property	HorizontalHeaderHeight property	HTTPHeader property	IDispatch property	IFont property	InputMask property	IPicture property	IsError method	IsPostMethod property	Iterate method	LastError property	LeftColumnNumber property	LicenseVerified property	Listen method	LiveEditMode property	LocalHostAddress property	LocalHostName property	LocalPort property	Log method	LoginID property	LoginPassword property	MarkColumnForUpdate method	MaskedText property	MaskedTextBox component	MultipleSelection property	NullBuffer property	NullValue property	OleObject property	OleObjectCount property	OutOfBoundsValue property	OutputFormat property	Pblock property	PictureDisp property	Prepared property	Print method	ProfileString property	PromptChar property	Protocol property	QueryClose event	QueryOpen event	QueryPrepare event	QueryVariable property	QueryVariableCount property	QueryVariableList property	RealCount property	Receive method	Redirect method	RemoteHostAddress property	RemoteHostInetAddress property	RemoteHostName property	RemotePort property	RemoveResponseHeader method	Request property	ResetLastError method	ResizableColumns property	ResizableRows property	ResponseHeader property	RestoreState method	ResultCode property	RowHeight property	RowTitle property	RuntimeKeyAvailable property	RuntimeLicenseKey property	SaveState method	SCode property	SelectedColumnNumber property	SelectedEndColumnNumber property	SelectedEndRowNumber property	SelectedRowNumber property	Send method	SendHeaders method	ServerName property	ServerSocket component	ServerVariable property	ServiceEvent event	Session property	ShowColumnLines property	ShowHorizontalHeader property	ShowRowLines property	ShowVerticalHeader property	ShowWindow event	SLONG property	Socket component	SocketClose event	SocketConnect event	SocketConnectionRequest event	SocketDataArrival event	SocketError event	SocketHostResolved event	SocketSendComplete event	SocketSendProgress event	Source property	SSHORT property	STINYINT property	SupportedUpdateTypes property	SystemKeyDown event	ThreadLock method	ThreadSafe property	ThreadUnlock method	TIME property	TIMESTAMP property	TopRowNumber property	ULONG property	UpdateErrorLogFile method	UpdatePolicy property	UseCurrentDate property	UseDefaultBindTypes property	UseTabs property	USHORT property	UTINYINT property	VerticalHeaderWidth property	VisibleColumnCount property	VisibleRowCount property	W_ISCANVASHANDLE macro	W_ISREGIONHANDLE macro	WaitUntilReadable method	WaitUntilWritable method	WArray class	WBitmapArray class	WBoolArray class	WCMRETURNSFLOAT macro	WCode property	WColorArray class	WDatabaseErrorEventData struct	WDataErrorArray class	WError class	WFBoldType enum	WGridEventData struct	WHttpConnectCGI class	WHttpConnectISAPI class	WHttpConnectNSAPI class	WHttpNameValue class	WHttpNameValueArray class	WIntArray class	WLocaleSortID enum	WLongArray class	WMULTIOSWARNING macro	WPointArray class	WQueryCloseEventData struct	WQueryOpenEventData struct	WResourceIDArray class	WShowWindowEventData struct	WSocketDataArrivalEventData struct	WSocketEventData struct	WSocketSendProgressEventData struct	WSortableArray class	WSortableVector class	WStockBitmap enum	WStringArray class	WSystemLogicalFont struct	WToolbarItemInfoArray class	WULongArray class	WUPDATEERRORLOGFILE macro

•	The following topics have been deleted from the Optima++ Component Library Reference since Optima++ 1.0:

AddRef method	Free method	GetIFont method	GetIPicture method	QueryInterface method

•	Previously, if you set a form to disabled (or transparent), when you reloaded it was disabled at design-time.

•	Fixed a bug where if you deleted a form while it was selected in the object inspector, you would get a run-time exception.

•	Fixed a problem where if you modified a query through the "Edit Query" or text popup menu items, the code was not regenerated and changes were not reflected.

•	Fixed a problem where the parameter wizard would disorder pages for functions with many parameters.

•	Fixed a problem where the width of the combo box on the code editor's bookmark toolbar was inadvertently not being resized when the window was resized.

•	Fixed the problem where some help IDs in the form wizard were being set before the controls were actually created.

•	Fixed the bug that prevented the "Closing project, please wait" dialog that Optima++ usually shows if it takes more than about half a second to stop the compiler/linker.

•	The Copy DLL option in Run Options now works if you specify a command line.

•	[PT-343474] The Files window is now refreshed if you add a file that is not directly built (e.g. *.H, *.HPP, *.TXT files).

•	Added a default file mask to the file dialog displayed when Optima++ cannot find a file at load time and the user asks to try to find it.

•	When the user finds a file that Optima++ could not be find at load time, Optima++ now correctly updates the project to contain the new location of the file.

•	Before a background build Optima++ generates any files that need to be generated.  For a large project this can be time consuming.  Even if there is nothing to regenerate Optima++ may take some time to determine that all the files are up to date.  Optima++ now displays an hour glass cursor during this wait.  In a future release we will optimize the process so the wait is not so long.

•	UpDown controls did not set the text initially, since the SetValue was generated before the SetBuddy.  Further, we did not generate SetValue if it was zero. Both problems are fixed.

•	Previously, you could coax Optima++ into generating bad code for menu separators by setting the NegotiateMenus property.  Now it is ignored for separators.

•	Fixed a bug that caused Optima++ to cause a run-time exception if you tried to open the context menu for a spot on the component palette that does not have a component under it.

•	Bug fix: if you set a breakpoint then did anything that would cause generated file names to change, the breakpoint information would be corrupted.

•	Added code for remote debugging that checks which DLLs an Optima++ EXE relies on when downloading to the remote machine.

•	Changed the TCP/IP downloading code for remote debugging that sped it up by a factor of about 8.

•	Fixed painting problems in locals/watches window when the name field was too narrow.

•	[PT-342833] If you edit the precompiled header file for the first time, the Files window will now be updated. Previously, it still showed the shortcut to the shared header file.

•	Fixed the bug that caused Optima++ to emit bad RC files for projects that contained more than one targets that were not in subfolders of wherever the project file was.

•	Removed color property pages for column headings as the colors are ignored.

•	We now commit editors when we copy to clipboard or to a template.  Previously, uncommitted changes were not saved.

•	[PT-338198] Previously, you could turn off visible for MDI children, but it did nothing

•	[PT-344318] Fixed a problem where minimizing or maximizing a form at design-time caused it to be the minimized/maximized size at run-time.

•	[PT-347280] Fixed the bug where if you had a non-standard font, autosize would not work correctly.

•	[PT-347447] on the Server page of WTransaction, the LoginPassword now uses a password character.

•	When saving a target as a template from the Targets window, the project (.WXP) file, the user settings (.WXU) file, and the shortcut to the WPCH.HPP file are no longer saved in the template (they are not needed.)

•	Fixed the bug that caused the default event handler prototypes for APPLIC.WXC to be re-emitted every time you loaded certain targets. The symptom was that Optima++ would rebuild APPLIC.OBJ every time you loaded a project that was missing the "MainForm" tag in its target file.

•	Fixed the bug that caused a run-time exception if you picked "New/File" from the main Optima++ window and you didn't select a target, and your project contained more than one target.

•	Made a change so that if the timestamp on a WXF file does not match that for the generated CPP/HPP/RC files, the output files are regenerated anyway.

•	Fixed the Error log window so that it doesn't keep making itself visible every time you run (unless you have errors).

•	Fixed the dialog used by the "Clean" item in the main Optima++ menu to force the vertical scroll bar to appear. The style to do that was being lost when the dialog was created.

•	Previously, you could not set the selected range for a slider unless you turned on EnableSelRange; now it should work if you set the range then the style.

•	[PT-340544] The tab order was wrong on the "Connect" page of the transaction object's property sheet

•	[PT-329403] previously, we ignored the return value of the user's Create and Destroy event handlers for forms. Now they are returned from the generated base event handler.

•	[PT-339939] Previously, if the "Snap To Grid" option was off, then "Shift+cursor key" would move by 4 pixels.  It now moves by one DLU.

•	[PT-338843] Previously, if you set the position of a progress bar to zero, it would be reset to fifty when you reloaded the project.

•	[PT-331827] If you instantiated a template that lined up with the original object in either the horizontal or vertical direction, the template was pasted over top of the original.

•	Fixed a bug that would not let you set a breakpoint in an EXE if there was also a DLL in the project.  Previously, if you had a multi-targeted project, forms would only have the correct title in the Window menu if they were in the current target.  now they always show the right title.

•	Previously, OLE objects did not work inside forms within DLLs.

•	Previously, OLE objects on separate forms could duplicate resource id's (commonly, 100).  To avoid this problem in the future, they use text-based ids.

•	Optima++ now stops background building when you tell it to save your project (previously the engine was stopped only when you did as Save As operation). This fixes the problem where saving would very occasionally fail if a CPP file was being built when you saved the project.

•	Fixed a bug that always disabled background building after you did a Save As operation.

•	Previously, adding a new icon, cursor, or bitmap file from the Resources window would not cause the Files window to be updated. Now it does.

•	If you load a resource file that does not contain a version info resource, Optima++ no longer generates incorrect .RC files.

•	Fixed a bug in the query editor which caused Optima++ under NT 3.51 to cause a run-time exception when the user select ALL from the TABLE combo box.

•	Previously, if you made modifications to any managed classes after doing a save-as, subsequent saves would silently fail.

•	When you delete an image from the Resources window, you are asked to confirm the deletion of the selected files. Previously, the image gallery hid the selection when the prompt was up so you could not tell which files you were about to delete. Now the gallery keeps the selection even when the prompt is up.

•	Fixed a bug where if you try to save a target in a folder which contains read-only files, Optima++ would complain that it could not erase the folder. Now Optima++ saves the target successfully.

•	Pressing F2 in an editor to jump to a called function's code now works for event handler calls.

•	If you rename a target file outside of Optima, then load a project, Optima++ prompts you to find the target file. Optima++ now remembers the new name/location of the target file (previously it did not).

•	Optima++ now prompts you to save outstanding changes if you try to shut down Windows (or log in as a different user) while Optima++ is still running.


Changes and fixes between version 1.1 and 1.0
 Optima++ 1.5 Read Me First Information
   What’s new
    Changes and fixes between version 1.1 and 1.0

The following describes new features and problems fixed in Optima++ between versions 1.0 and 1.1.

•	Optimized the speed of adding files to a target. This increases the speed by approximately one third.

•	Optimized the code that adds files to existing projects. It should be 20% - 50% faster, depending on how many files are already in the target.

•	Added bookmarks to (big edit mode) code editors. A bookmark is a marker to a line in a given editor. When you open an editor, the breakpoint list is initially set to the list of functions in the editor, but you can add your own bookmarks too. Bookmarks persist only for as long as the editor is open. Once you close it, they are lost.

•	In the editor, pressing F1 is now a shortcut for opening the context menu and selecting the "Help on xxxx" item.

•	Pressing F1 in the Form Painter now opens help on the active object. If none are selected, help on the form is displayed.

•	Pressing F1 in the object inspector now opens help for the selected property or event.

•	In big-edit mode of the editor, pressing F2 now takes you to the code corresponding to the function name in the selected text (or the text where the I-beam is).

•	In the editor, Ctrl+A is now the accelerator for "Select All".

•	In the editor, pressing Shift+F10 now opens the context menu (as it does in all other Windows editors/text boxes).

•	In the editor, changed CTRL-UP CTRL-DOWN behavior to match brace up and down.

•	Big Edit mode now maintains a stable order for events, rather than adding new events at the end.

•	The "Add File" dialog now contains a check box that says whether the files should be copied to the target folder. The box is checked by default, which is the Optima++ 1.0 behavior.

•	The Install program now accounts for cluster size when calculating space requirements.

•	The resource compiler now automatically uses the current code page to convert text in resources to Unicode.

•	Optima++ can now delete read-only files. Previously, it failed without giving any error messages.

•	Cleaning a project now stops any background build activity before doing the actual cleaning. This fixes a problem where the clean would fail with a message like "Could not delete file xxxx".

•	Optima++ now prompts you to save outstanding changes if you try to shut down Windows (or log in as a different user) while Optima++ is still running.

•	When pasting objects or instantiating an object template, the view windows are now refilled only once after the operation has finished. Previously, they were updated after each object was pasted which lead to a lot of flickering (and delay) if you were pasting more than one object.

•	Fixed a memory leak from loading the CPP file prefix, HPP file prefix, Class contents, and Generated class contents for managed classes.

•	Made the "Copy files" checkbox in the "Add Files" dialog work correctly under NT.

•	Fixed a bug with changing the properties of combo boxes. Previously, when you changed a combo box from drop down to simple, then back to drop down, it would hide the drop down button.

•	When you have scroll bars on a simple combo box, they now show up at design time if there are enough items.

•	Transaction and query objects now call RemoveObject in the form's destroy event; this fixes a problem where opening a form and closing it would cause a run-time exception on the second open.

•	Fixed a bug with changing properties in the object inspector.  Previously, double clicking on the text area of a property in the object inspector would not apply the property change, although the new property was listed in the inspector.

•	Fixed a bug in object selection. Previously if you had multiple objects selected and pressed an arrow key, nothing would happen unless one of them was active; in that case, only the active object was unselected.  Now, if any objects are selected you can press arrow keys to move the selection, and all objects are unselected first.

•	Fixed a form painting problem. Previously, the form did not repaint when you changed the grid size or visibility.

•	The column names in the drop down on the database page are now quoted if they contain non-identifier characters; previously, they were only quoted in the column dialog box.

•	When a target is running, the "most recently used" list of projects in the file menu is now disabled.  You cannot load a new project while a current project is running.

•	Targets are now marked as dirty when the 'use default options' menu item is selected in the target view.

•	Fixed bug where multi-target projects got more "TargetTwinFilesName" entries in their .wxt files each time the project was saved.  Added code to remove extra "TargetTwinFilesName" entries from existing targets.

•	Optima++ no longer causes a run-time exception if you create a new file but do not add it to any target.

•	Dragging files onto the Files window no longer causes duplicate items to appear.

•	When you do a 'file build' Optima++ will no longer display errors generated by a different file during a previous build.

•	Fixed the bug where Optima++ caused a run-time exception if you had two small-mode editors opened, then made a change to one of them.

•	Fixed the problem in the files window where shortcuts would show up with an incorrect image under Windows NT.

•	The assignment operator generated for WOleDispatchHelper classes by the OLE Component Wizard now passes FALSE for the second argument of the Create() call.

•	Methods of automation servers/OCXs that had arguments whose type was an enumeration were being passed as VT_INT arguments. This caused problems with some OCXs so they are now passed as VT_I4.

•	Some arguments to methods of automation servers/OCXs were being passed incorrectly with a type of VT_USERDEFINED.

•	Fixed the frequently reported problem that the event code for pasted objects (or object templates) can contain the wrong class name in the code.

•	Fixed a bug in the backup file logic that prevented backup files from being deleted in multiple-target projects. The bug affected only those files that were not in the same folder as the project file.

•	Fixed a bug in the backup file logic that prevented any warnings about backup files if you were loading a multiple target project and the first target did NOT contain any backup files.

•	Optima++ now blocks attempts to rename objects to the empty string.

•	Fixed a bug in the backup file reverting code that prevented files from ever being reverted properly (files are reverted if you load a project with backup files and then tell Optima++ that you do NOT want to recover the unsaved changes).

•	The component palette now resizes when an item is added to it.

•	You can now create a casting operator as a user function for a managed class. Previously, you would get a message complaining that the operator's return type was not a valid operator.

•	Fixed the function renaming code for managed classes so that you can now rename functions for which you have specified default arguments. For example, you can now rename: WBool clearAll( WObject *source = NULL, WEventData *event = NULL );

•	The Debug Log options dialog is no longer parented to the log window. This works around the problem that you cannot see the whole dialog if the log window has "Always on Top" turned on.

•	If you load a project, the "Always on Top" menu item is now checked if the window was always-on-top when you last closed the project. (The Always on Top setting was being restored correctly, but the menu item just was not being checked.)

•	Fixed the bug that prevented the project file from being written out if you were doing a Save-As operation and the project file happened to be read-only.

•	Fixed a problem where specifying a prefix in the OLE component wizard caused compilation errors during component generation.

•	Fixed a problem where generation of dual interface classes were missing the __stdcall attribute.

•	Fixed a problem where the return type of OLE methods that returned pointers to dispatch interfaces was incorrect.

•	Types of arguments and methods that were dispatch interfaces now use the dual class in the type if the dispatch interface is dual.

•	Fixed a problem where the OLE component wizard was not listing all type libraries.

•	The Files window now displays the number of objects (files/folders) and their combined size in the status bar.

•	In the Files window, the dates and times are now formatted according to the default local date/time format.

•	In the Files window, clicking on column headings in detail layout now sorts the file list using that column as the sorting key. Click on the same heading again to sort in the opposite direction.

•	In the Resources window, version information pane: if you scroll the list view while the editing text box is open, the text box is now closed automatically.

•	User-defined resources are now displayed for loaded projects.

•	Fixed a bug in the New File code: previously, if you tried to create a new file using the name of an existing file, Optima++ would cause run-time exception. Instead, it now warns you that the file exists and asks if you really want to overwrite it.

•	If you add a new class to a project but enter an illegal class name, Optima++ now alerts you and refuses to accept the class name. Previously, it would accept the name and as a result, emit bad code.

•	Fixed a bug where breakpoints in the CPP prefix were not being saved/loaded.

•	Fixed a bug where the debugger window position settings were not being loaded from the .wxu file.


Tips
 Optima++ 1.5 Read Me First Information
  Tips

This section includes tips to help you get the most out of Optima++.

 Database tips

 Using OLE controls

 Base events

 Using the Standard Template Library (STL)

 Other tips


Database tips
 Optima++ 1.5 Read Me First Information
   Tips
    Database tips

Starting the DataWindow Builder

Before starting the DataWindow Builder, you must set the Database property of the DataWindow object to the transaction object that you want it to use.

Once the Database property is set for the DataWindow, you can invoke the DataWindow Builder by using the right mouse button to click the DataWindow object, then point to Powersoft DataWindow Control and click Edit. Note that the DataWindow Builder may take some time to open. If you start the DataWindow Builder without setting the transaction object, the DataWindow Builder will use a default transaction object.

See the DataWindow objects section of chapter 10 of the Optima++ Programmer’s Guide for more information.

DataWindow symbols

DataWindow typedefs and enums are generated into a NameSpace class. This makes it possible for DataWindows to coexist with other OLE components on the same form. One result is that forms with DataWindow objects have PSDWELib_Types automatically added to their list of base classes. If there is a conflict between DataWindow symbols and the symbols of other OLE components, you can reference DataWindow types by explicitly scoping them, as in PSDWELib_Types::BORDERTYPE.

Diagnosing database problems

If your database application isn’t working as well as you expect, turn on TraceToLog for the query and/or transaction objects involved. This writes detailed tracing information to the debug log, and should make it easier to track down the problem.

Using bound grid controls

When a bound grid control has the  DataTrackRow property set to FALSE, edits made to the grid data are not made to the database, because the query object does not enter edit mode. When DataTrackRow is TRUE, editing a value causes the query object to switch to edit mode (as it does with a text box). The limitation when DataTrackRow is FALSE is due to the "operations on the current row only" nature of the query.

This problem should be addressed in a future release. In the meantime, if you want to use a grid to perform database edit, insert or delete actions, the DataTrackRow property should be on.

Cursor types

Certain bound controls do not work with forward-only cursors. If your ODBC driver only supports forward-only cursors, you can ask ODBC to simulate scrollable cursors by setting the CursorDriver property on the transaction object to WTCDSimulate.

If you try to do updates and you get an ODBC error message complaining that the cursor library is not capable, you might have to change the settings for either the ConcurrencyLevel or UpdatePolicy properties on the query object. Set the ConcurrencyLevel to either of the “optimistic” settings, not WQCLLock. Set the UpdatePolicy property on the query object to WQUPCursor. Note that UpdatePolicy is not found on the query object’s design-time property sheet, you must set it at run time by calling SetUpdatePolicy.

Performance

Various property settings can affect the performance of your database application, especially when using bound components:

List views and grid controls both support the properties DataGuardRows and DataKeptRows which control how many rows of the database query are kept in the list view or grid at a time. The more rows, the longer it takes to fetch the data; however, the fewer rows, the more often your program has to fetch data. You may have to experiment to find the best trade-off, but always ensure that the DataGuardRows property is less than or equal to one third of the DataKeptRows property.

For similar reasons, adjusting the RowsetSize up or down may improve program performance.

For some databases (for example, SQL Anywhere) dynamic cursors are faster than static cursors. The cursor type is dictated by the CursorType property.

Only turn on AutoPrepare for a query if you intend to call Resubmit.

Turning off AutoRefresh may speed performance, although it may cause problems when you use a list view or grid (since the data may not be properly refreshed as you move about the display).

Using INTERSOLV DataDirect ODBC drivers

Optima++ Developer includes INTERSOLV DataDirect ODBC drivers for flat-file databases. The following programs and formats are supported:

•	Btrieve version 5.0 and higher.

•	dBase II, dBase III, dBase IV and dBase 5.

•	Clipper.

•	FoxBASE.

•	FoxPro 1.0, 2.5, 3.0.

•	Excel 2.0 and higher.

•	Paradox 3.0 to 7.0.

•	Text files in a variety of common formats.

The Optima++ sample Intersolv ODBC drivers demonstrates a variety of connections from the above list of programs. Limitations and programming tips for the various drivers are discussed within this sample program. Some of the drivers require additional DLLs and support programs which are not supplied with the INTERSOLV DataDirect driver package.

Optima++ Professional and Enterprise include a number of additional INTERSOLV ODBC drivers for a variety of databases:

•	DB2/2.

•	INFORMIX.

•	INGRES.

•	MDI

•	Oracle 7

•	SQLBase

•	SQL Server

•	Sybase System 10

To contact INTERSOLV, call +1-800-443-1601 or FAX +1-919-461-4527.

Redistributing ODBC with InstallShield Express

The Intersolv ODBC and SQL Anywhere 5.0 Runtime Environment InstallShield objects are missing two ODBC files. If you choose to include either of these objects with your InstallShield installation program, you must also include the following ODBC files:
ODBCCR32.DLL
ODBCINST.CNT

ODBC drivers which use the ODBC cursor library require ODBCCR32.DLL, and the versions of ODBCCR32.DLL and ODBC32.DLL must be compatible. Make sure that the version information in each file shows the same value for CursorLevel.

Working with Microsoft SQL Server

If you call one of the List methods (for example, ListTables) on a transaction that uses the Microsoft SQL server, the SQL server changes your cursor type to forward-only without any notice. To get around this problem use:

transaction_1->SetCursorDriver( WTCDUseODBC );

ODBC will then use the cursor library, which provides scrollable cursors. Do this before you call the List method, but only if you want the list to be scrollable.  If you're just going to use MoveNext to go through the list you don't have to worry about it, except to reset your cursor type before doing another query.


Using OLE controls
 Optima++ 1.5 Read Me First Information
   Tips
    Using OLE controls

Note: The terms OLE control and OCX are used throughout the Optima++ documentation to refer to ActiveX controls.

If you have trouble using an OLE control, you may be missing a required DLL file. OLE controls usually require one or more of the following DLL files:

•	OLE32.dll (latest version)

•	OC30.dll

•	MFCANS32.dll

If you are missing one of these files and need it for an OCX, you should obtain the missing DLLs from the OCX provider. Your OCX provider should also provide an installation program or a registry script to add them to the registry.

If you reinstall Optima++, you will lose the ability to use previously added OLE components. To add them again, select Add OLE Component from the Options menu.

Visual Components

If an application uses the Visual Components VisualSpeller OCX, the dictionaries used by the OCX must reside in the same folder as the project. The dictionary shipped with Optima++ is named AMERICAN.VTD.

For information on contacting Visual Components, see the online help for Formula 1, First Impression or Visual Speller. You can access this online help from the contents tab of the Optima++ Master Help.

NetManage

The NetManage ActiveX controls in Optima++ Professional and Optima++ Enterprise are release versions of the controls. Beta versions of the same controls were released as the Microsoft Internet Control Pack (ICP). If you have previously installed the beta 2 version of the ICP, some of your existing code may not work because some features changed between the beta and release versions. Most notably, the Connect event was renamed to StateChanged, and the Authenticate event was renamed to ProtocolStateChanged.

Samples are provided to demonstrate the use of the HTML, HTTP, and FTP controls.

If you have difficulties changing your code from using the beta OCXs to the release OCXs, please contact NetManage.

You can contact NetManage at:

10725 De Anza Blvd. Cupertino, CA  95014, U.S.A.
+1-408-973-7171	(voice)
+1-408-973-8272	(FAX)
http://www.netmanage.com

International phone numbers:
+972-4-8550234	(voice)
+972-4-8550122	(FAX)

Gamesman

The Gamesman OCX controls included with Optima++ are licensed from:

Gamesman Inc.
+1-204-475-7903	(voice)
+1-204-284-3307	(FAX)
gamesman@kwanza.com


Base events
 Optima++ 1.5 Read Me First Information
   Tips
    Base events

There is a generated Create event handler on every form called __Base_Create. One of the actions of __Base_Create is to invoke a function called __Base_SetEventHandlers; this function sets a number of default event handlers for the form (for example, the LeftButtonDouble event handler).

Every time a window is cloned, __Base_Create is invoked and therefore __Base_SetEventHandlers. This means that the default event handlers get put on the event handler chain again. When one of the relevant events is triggered, the standard event handling mechanism begins going through all the handlers on the chain, which means the same event handlers may be invoked twice.

Now consider what happens if an event handler clones a form (which happens, for example, if you call SetStyle once the form has been created). This action clones the event handlers for the new form, including the event handler that clones the form. The result may be an infinite loop of cloning. The workaround is to register an event handler that does nothing but return TRUE before you register the event handler that causes the clone to appear. This TRUE event handler stops the event handler mechanism from proceeding further down the chain of event handlers, so that you avoid the infinite loop.


Using the Standard Template Library (STL)
 Optima++ 1.5 Read Me First Information
   Tips
    Using the Standard Template Library (STL)

The Standard Template Library (STL) is a collection of C++ templates that provide generic algorithms, container classes, and so on for use with C++. STL is copyright by Hewlett-Packard, but can be freely sold and distributed. For a version of STL that works with Optima++, download the file:

http://www.watcom.on.ca/optdev/stlopt.zip

This a slightly modified (for Optima++ compatibility) version of the STL source files from Hewlett-Packard.


Other tips
 Optima++ 1.5 Read Me First Information
   Tips
    Other tips

The following miscellaneous tips may help you to use Optima++ more effectively.

•	Under Windows NT, you need to have correct permissions to use Optima++. See Installing and using Optima++ on Windows NT for details.

•	Use Optima++ Master Help in the Powersoft Optima++ folder to access all Optima++ help files at once. The Contents, Index and Find tabs for Optima++ Master Help use all the help files. If you only want to search part of the Optima++ online help, for instance only the Optima++ Programmer’s Guide, then just open that help file.

•	For Optima++ Developer, you can use the Optima++ Runtime Deployment Kit (found on the installation CD-ROM) to simply install Optima++ run-time files if they are required for your application. This setup program, and the Optima++ setup program, were created using InstallShield. For Optima++ Professional and Enterprise, you will probably prefer to use the included version of InstallShield Express instead of the Runtime Deployment Kit. For information on InstallShield contact InstallShield Corp. at (800) 374-4353 or (847) 240-9111.

•	When running your application in debug mode, calling functions that are not supported by the OS will result in a warning dialog. If you wish to suppress these, simply add the following line to the StartHandler in the ApplicationClass:
    SetMultiOSWarnings( FALSE );

•	The QuickView application that comes with Windows 95 can display information on functions imported and exported by DLL, EXE and OCX files. If QuickView does not appear on the context menu when you right click on one of these files with Explorer, it may not have been installed when you installed Windows 95.

•	If you want to set multiple controls to the same custom color, select them all in the form design window, open the Object Inspector, and set the BackColor or ForeColor property to the chosen color.

•	If you are using ResizePercentages properties, enforce a minimum tracking size for your form (using the MinimumTrackingSize property) and set the ResizePercentages to prevent any control dimension from being less than or equal to zero. Once a dimension is zero or negative, further resizing produces unpredictable results.

•	Only use form proxies to load one form from another. Form proxies do not provide a general way to refer to any form from any other form.

•	Avoid using file names that begin or end with spaces, or file names that match MS-DOS devices (e.g. con, prn, lpt1, lpt2, ... com1, com2, ...).

•	Be aware that some operations can be time consuming, especially with large projects. For example, the first time Optima++ is run, it may take a long time to compile the shared precompiled header file. Also, you may experience a delay in reaching the first breakpoint in programs, because Optima++ defers loading the debug information until it is needed.


Known problems
 Optima++ 1.5 Read Me First Information
  Known problems

Known problems with the shipping version of Optima++ 1.5 are highlighted below.

•	Under Windows NT, you need to have correct permissions to use Optima++. See Installing and using Optima++ on Windows NT for details.

•	If you add a library to a target, Optima++ will not recognize that the target needs to be updated.
Workaround: Choose Clean from the Run menu, then run the target again.

•	If the DataTrackRow property is not set for bound grid controls, then updates to the grid will not be reflected in the database. DataTrackRow must be turned on in order for updates to work correctly.

•	The grid component has an AddRow method that is not documented in the Optima++ Component Library Reference, but is available from the Reference Card. Use it to add a new, empty row to a grid. The prototype is:
WBool AddRow( WULong rowNumber=0xFFFFFFFFL );
The argument specifies the row number for the new row. The default is to add the new row at the bottom of the grid.

•	If you are using the Visual Components Formula One Workbook Designer, Optima++ causes a run-time exception if you click New on the File menu of the Designer.

•	The following two methods on the DataWindow component do not work: grGetDataSymbol, grGetSeriesSymbol.

•	The NetManage HTML control may display black boxes where there should be JPEG or GIF images. This only happens under Windows 95 at 256 colors.

•	If you close a WServerSocket and Create one again for the same port, under some conditions Listen fails with error 10048 (address already in use).
Solution: A new property, Option, has been added to WServerSocket to let you configure socket options provided by WinSock. This property is not listed in the Reference Card or the Optima++ Component Library Reference. To prevent the problem, enable WSockSO_REUSEADDR for the Option property after Create and before Listen, as in:

    srvsocket_1.SetAsynchronous( TRUE );
    srvsocket_1.SetLocalPort( 1100 );_
    srvsocket_1.Create();
    srvsocket_1.SetOption( WSockSO_REUSEADDR );
    srvsocket_1.Listen();

•	When you install a new version of Optima++, you lose previously added OLE components.
Workaround: To add them again, click Add OLE Component on the Options menu.

•	The Win32 SDK must be installed as a subcomponent of Optima++. The installation program does not allow you to choose a different directory for the Win32 SDK. This issue will be addressed in a future release.

•	If you change the default form name when you create a new target with the Target Wizard, you will get an assertion failure with the message “Unable to find dialog resource” the first time you run the target.
Workaround: Choose Clean from the Run menu, then run the target again.

•	When using the code editor, you cannot delete a range of text which includes syntax errors. Remove the syntax errors first (F12 or Remove Errors in the Search menu).

•	Currently, if you cut an OLE control from one form and paste it on another, Optima++ will cause a run-time exception.
Workaround: Add a new OLE control to the second form and copy and paste the event code from the OLE control on the first form.

•	As your project grows, you may find a noticeable pause when you close a code editor window. The length of the pause depends on the number of forms and classes in your project and the speed of your hardware. An hourglass cursor is displayed during the pause. The pause only occurs if background building is enabled. Future releases of Optima++ may reduce this delay.

•	The following properties were not included on the property sheet of query objects:
DriverPacksRows
LongColumnBindSize
UpdatePolicy
UseBookmarks
UseDefaultBindTypes
If you need to set any of these, do so at run time in the Create event handler for the query object or form containing the query object.

•	If you add controls to a form and they overlap, or you change the relative tab stop order of overlapping controls, Optima++ does not display the controls in the same Z order as at run time.
Workaround: Save, close and reopen your project to correct the display.

•	Frames can intercept mouse actions of contained controls and can display on top of the controls.
Workaround: To use controls on a frame, make sure the frame precedes the controls in the tab stop order (to display correctly at run time) and set the Disabled property on the Style page of the frame's property sheet (to prevent the interception of mouse actions).

•	Although Optima++ recognizes the full set of interfaces for complex OLE data binding, some problems may occur for OLE controls that conform to the Visual Basic data source where it differs from the published complex OLE data binding specification. If you experience any incompatibilities, please report the problem so that we can try to resolve it for future releases.

•	If you put an erroneous statement into a Code Patch field in the debugger, Optima++ hangs when it hits the breakpoint.

•	The debug log only works if you have some form of networking support installed.

•	When you select Add File on the Target View the file dialog that appears has a check box that says Copy the file(s) to target folder. If this check box is unchecked and the selected file is a form file (.wxf) or a  class file (.wxc) then the file will be copied anyway.

•	You may get a warning that begins "Build process did not update file …". This means that the build process tried to create a target file (or intermediate file) from a source file, but the resulting file was out of date with respect to its source files. For example, it might indicate that a CPP source file was compiled to an OBJ file, but the OBJ file ended up with a time stamp earlier than the CPP file. If you experience this problem for reasons other than the two below, please report the problem.

The warning can happen if source files have time stamps that are newer than your computer’s system time. Since the target and intermediate files will be created with the system time, they end up with earlier time stamps than the source files. The result is that the target will be rebuilt unnecessarily every time you run it.
Solution: Change your system time or the time stamps of the source files.

The warning also occurs from a problem which should be fixed in a future release of Optima++. If you have include files or resource files (.ico, .bmp, .cur, etc.) that are on a network drive and any of the files have an odd number of seconds in their time stamp (e.g. 10:10:11 but not 10:10:10 ). In this case the target will be rebuilt unnecessarily every time you run it because of a rounding error in the way the times are reported to Optima++.
Workaround: Copy the files to a local drive or change the time stamps of the files on the network drive to have an even number of seconds.

•	The Image Editor cannot create 24x24 icons.

•	You cannot copy and paste tab controls, and you cannot copy tab controls to templates.


Updates to the Programmer's Guide
 Optima++ 1.5 Read Me First Information
  Updates to the Programmer’s Guide

The following notes describe updates and modifications to the Optima++ Programmer’s Guide. These changes do not appear in the printed copy of the guide, but are found in the online version. General notes are followed by topics corresponding to the chapters of the guide.

Various screen shots throughout the guide have been updated to reflect recent changes to the user interface.

A few code samples have been slightly revised. If you are having trouble with a printed code sample, see the online version of the Optima++ Programmer's Guide.

Updates to Chapter 2. Using targets and projects

A new section has been added to Source code control in Optima++, explaining how to check in files for the first time using Optima++. See the online help under “Checking in a project for the first time”.

The printed guide says that Optima++ works with PVCS Version 5.1 and up. However, PVCS Version 5.1.1 does not support long file names; since Optima++ always sends the long file name format to PVCS.

When you check in a project using source control, Optima++ now asks you what to do with files that are not currently under source control.

Updates to Chapter 3. Using Optima++

A new section has been added to describe the Advanced Class Definition feature. See the online help under “Changing the class associated with an object”.

Updates to Chapter 8. Using forms and windows

A new section has been added to Exchanging data with forms, explaining how to represent objects with different types of data. See the online help under “Alternate FDX Data Types”.

Under the section ResizePercentages properties on page 370, the following note has been added:

Note: If you are using ResizePercentages properties, enforce a minimum tracking size for your form (using the MinimumTrackingSize property) and set the ResizePercentages to prevent any control dimension from being less than or equal to zero. Once a dimension is zero or negative, further resizing produces unpredictable results.

Under the section FDXOut on page 380, the code statement should read:

textb_1->FDXOut( );

Updates to Chapter 9. Debugging

Under Requirements for remote debugging, the file Pview.dll should be copied to the remote system as well as tcpserv.exe and std.dll.

A new section has been added explaining Run options. This describes a number of options which are particularly useful for debugging DLLs and web services.

Updates to Chapter 10. Working with databases

The description of DataTrackRow on page 491 has been updated to also say that the MultipleSelection property must be turned off for grids.

DataWindow objects in Optima++ are subject to the following limitations:

•	The PowerBuilder 5 DataWindow direct syntax is not available in Optima++.

•	When an Optima++ application uses a PowerScript DataWindow function with optional parameters, argument values must be supplied; you cannot omit the parameters.

Updates to Chapter 11. Writing Internet applications

The template for NSAPI applications now includes a file named INSTALL.HTM. This file contains an HTML explanation of how to install an NSAPI application.

NSAPI and ISAPI applications create a new WebService object every time the web server passes control to the web service. This means that the WebService constructor is executed each time the web service takes control and the destructor is executed each time the web service returns control to the server. Since a new WebService object is created every time, data must be declared static if you want to preserve it from one invocation to the next.

The online help contains new sections on HTTP headers and on debugging web services.

Updates to Chapter 13. Object linking and embedding

A new section has been added to Using OLE objects at run time, explaining how to use the indexed list of objects associated with a form. See the online help under “Using a specific object”.

Updates to Chapter 14. OLE controls and automation

The sections on pages 621 to 628 have been revised for improved clarity. See the online help under “A deeper look at OLE classes”.

A new section has been added to OLE automation, explaining how to work with automation servers at run time. See the online help under “Creating an OLE automation server at run time”.

Updates to Chapter 18. Optima++ and Windows

Under the section Opening an existing key on page 716, the following note has been added:

Note: Under Windows NT, different users may have different access rights to the registry. (User access rights can be set by users with administrator privileges.) By default, users only have write access to registry keys under WRKeyCurrentUser..

A new section has been added to Adding online help to a program, explaining how to create “What’s this?” help in dialog boxes. See the online help under “Adding What’s This? help to dialog boxes”.

The procedure for accessing Windows API functions has been simplified for Optima++ Professional and Optima++ Enterprise. For more information, see the online help under “Windows API functions”.

Under the Creating and using DLLs section on page 738, the box at the bottom of the page should read:

Note: You do not need to create your own Optima++ import library if you already have a version of that import library that is compatible with Optima++ or Watcom C/C++. Simply add the existing import library to your project.

The time taken to build projects that use imported DLL classes and functions can be reduced where the included files do not change. For more information, see the online help under “Importing DLL classes and functions”.

Updates to Chapter 20. Deploying applications

The Unsupported features under Windows 95, Windows NT and Win32s section on pages 786 to 788 has been updated. The table now includes information on Windows NT 4.0.

If you are distributing applications to run against a SQL Anywhere network server, you must ensure that your server is properly licensed for access by your users. Optima++ Professional and Optima++ Enterprise include a SQL Anywhere network server licensed for three users.

Bibliography

The following Web sites have been added:

http://www.watcom.on.ca/optdev/
Optima++ technical product information, tips and tricks.

http://www.earthchannel.com/binpub/archives/optimapp/
Archive of an independent Optima++ email list.

http://www.total.net/~bklein/optima/
A user's site with Optima++ information.

http://www.optimapp.pbe.com/
A user's site with Optima++ information.


Getting technical support
 Optima++ 1.5 Read Me First Information
  Getting technical support

Optima++ Test Drive Edition is a promotional version provided at no cost, and does not include free technical support. You can purchase technical support on an annual or pay-per-issue basis.

Technical Support services vary by country. Our call centers are located worldwide, so if you are outside North America, check the phone listing below. For more information on services, contact your local sales representative or call (800) 395-3525 in North America.

Avoid a phone call if you can

Keep in mind that in many situations, you can get answers to your technical questions without calling technical support. Documentation and the Infobase CD can help you isolate a problem, solve it, or determine if you have encountered a known bug. Also by checking online services like the FaxLine Service, the Bulletin Board Service and FTP site, the Powersoft Web site, or the CompuServe and Microsoft forums, you may find that your issue has already been resolved.

Other support	Phone number or info you need
World Wide Web sites	www.powersoft.com www.sybase.com The latest technical support information is at www.powersoft.com/services/csinfo/tscontact.html
CompuServe	Type GO POWERSOFT or GO SYBASE in the WinCIM GO dialog
Internet FTP site	ftp.powersoft.com
Microsoft Network	GO POWERSOFT
Bug Reporting	Use the online bug reporting form at www.watcom.on.ca/forms/enhform.html, download faxbug.zip from FTP, Compuserve or BBS, or order Faxline document #1010
Enhancement Requests	Use the online enhancement request form at www.watcom.on.ca/forms/bugform.html, download faxenh.zip from FTP, Compuserve or BBS, or order Faxline document #1009
Training Schedule	FaxLine document #7699
Training Registration	(508) 287-1700, Option 2

 Before you call technical support

 North American technical support phone numbers

 International technical support phone numbers


Before you call technical support
 Optima++ 1.5 Read Me First Information
   Getting technical support
    Before you call technical support

Before you call technical support, be sure to determine the nature of the problem, isolate the problem, and have information at hand, such as your registration number or support ID; the case number and name of the technical support engineer you spoke with for a previous call; the syntax of the error message; the products and version numbers; your network protocol, platform, and operating system, and any system information you will need.


North American technical support phone numbers
 Optima++ 1.5 Read Me First Information
   Getting technical support
    North American technical support phone numbers

United States and Canada support	Phone number
Installation Support
Database Products	(508) 287-2655
Design Tools	(508) 287-2626
Development Tools	(508) 287-1750
Language Products (including Optima++)	(508) 287-2650
Annual Support
Database Products	(800) 797-8336
Design Tools	(800) 797-8440
Development Tools	(800) 937-7693
Language Products	(800) 925-9295
Pay-Per-Issue Support	(508) 287-1950
Technical Support Fax (US)	(508) 287-2525
Technical Support Fax (Canada)	(519) 747-4547
FaxLine	(508) 287-1600
BBS	(508) 287-1850
Consulting	(508) 287-1638
Customer Relations	(508) 287-1900
Fax  for Customer Relations	(508) 287-2555


International technical support phone numbers
 Optima++ 1.5 Read Me First Information
   Getting technical support
    International technical support phone numbers

International support	Main and support phone number
Australia	(61) 2 9937 9600
Technical Support	(61) 2 9937 9640
Technical Support Fax Number	(61) 2 9937 9652
Belgium	(32) 2 716 8338
Technical Support	(32) 2 716 8333
Main Fax Number	(32) 2 716 8389
BBS	(32) 2 716 8368
China	(86)10 856 8488
Main Fax Number	(86)10 856 8489
Czech Republic	(42) 2 2431 0808
Main Fax Number	(42) 2 2431 5024
France	(33) 1 41 02 34 56
Technical Support	(33) 1 41 02 35 35
Technical Support Fax	(33) 1 41 02 34 37
BBS	(33) 1 41 02 34 43
Germany	(49) 6122 92320
Technical Support	(49) 6122 923232
Fax on Demand	(49) 6122 923244
Main Fax Number	(49) 6122 923299
Hong Kong	(852) 2506 8900
Technical Support	(852) 2506 8901
Main Fax Number	(852) 2506 6096
Japan (Nichimen Data Systems)	(81) 3 3864 7429
Main Fax Number	(81) 3 3864 7566
Latin America	(305) 267 9344
Main Fax Number	(305) 267 9973
Netherlands	(31) 3465 58500
Technical Support	(31) 3465 58550
Main Fax Number	(31) 3465 58555
Technical Support Fax	(31) 3465 52642
Norway	(47) 5152 1220
Technical Support	(47) 5153 4455
FaxLine	(47) 5152 6228
Main Fax Number	(47) 5152 1213
Singapore	(65) 338 0018
FaxLine	(65) 334 4711
Technical Support Fax	(65) 330 4140
BBS	(65) 339 5521
Spain	(34) 1 383 1506
Main Fax Number	(34) 1 302 8937
Sweden	(46) 8 632 2800
Technical Support	(46) 8 751 0000
FaxLine	(46) 8 632 2818
Main Fax Number	(46) 8 703 9726
BBS	(46) 8 632 2828
United Kingdom	(44) 1 494 555555
Technical Support	(44) 1 494 555566
FaxLine	(44) 1 494 555522
Technical Support Fax	(44) 1 494 510666
BBS	(44) 1 494 555533