Dynamic packages in Delphi

Dynamic packages in Delphi

Abstract:A paper on how to create and use dynamic packages in Delphi. By Vino Rodrigues.

Any discussion of advanced package use in Delphi must raise the question: Why use packages at all?

Design-time packages simplify the tasks of distributing and installing custom components. Runtime packages, which are optional, offer several advantages over conventional programming. By compiling reused code into a runtime library, you can share it among applications. For example, all of your applications -- including Delphi itself -- can access standard components through packages. Since the applications don't have separate copies of the component library bound into their executables, the executables are much smaller-saving both system resources and hard disk storage. Moreover, packages allow faster compilation because only code unique to the application is compiled with each build.

Packages are even better when they are used dynamically. Packages offer a modular library approach to developing applications. At time those modules may become an optional entity of your application. Take for example an accounting system with an optional HR module. For some installations you will need to install just the base application -- for others you will install both the base application and the HR module. This level of modularization can be easily achieved by just including the optional package to the install base. In the past this was usually achieved with dynamically loaded DLLs, but with Delphi's package technology it is easy to make your modular classes part and parcel of your application. Classes created from packages become application-owned and thus can interact with your application classes.

Runtime packages and your application

Many developers think that Delphi packages are a place to put component -- but a package can (and should) also be used to modularize an application.

To show how to use packages to modularize your application we will create an example:

  1. Create a new Delphi application with 2 forms: Form1 and Form2.
  2. Remove Form2 from the auto-created form list in the Project | Options | Forms menu dialog.
  3. Drop a button on Form1 and add the following code to the OnClick event handler:
    with TForm2.Create(Application) do
    begin
      ShowModal;
      Free;
    end;
  4. Remember to add Unit2 to Unit1's uses clause.
  5. Save and run the project.

We have created a simple application that shows a form with a button that shows another form when it is clicked.

But what if we wanted to create Form2 in a reusable module?

The answer is -- PACKAGES!

To create a package for Form2 we will:

  1. Open the project manager (View | Project Manager)
  2. Right-click on the Project Group and select "Add New Project..."
  3. Select "Package" from the "New" items list.
  4. You should now see the Package editor.
  5. Select the "Contains" item and press the "Add" button.
  6. Now use the "Browse..." button to select "Unit2.pas."
  7. The package should now contain the unit "Unit2.pas."
  8. Now save and compile the package.

The package is now complete. You should have a file called "package1.bpl" in your Projects BPL directory. (The BPL is the Borland Package Library; the DCP is the Delphi Compiled Package -- sort of like the DCU of a PAS file.)

That's all that need to be done to the package. We now need to compile the original application with the package option switched on.

  1. Select the project "Project1.exe" from the Project Manager by double-clicking on it.
  2. Right-click and select "Options..." (You can also select Project | Options... from the menu.
  3. Select the "Packages" tab.
  4. Check the "Build with runtime packages" check box.
  5. Edit the edit-box in the "Runtime packages" section to read: "Vcl50;Package1" and OK the options.  
  6. NOTE: Do not remove Unit2 from the application.
  7. Save and run the application.

The application will run and behave just like before -- the difference can be seen in the file size. Project1.exe is now only 14K as apposed to the original 293K. If you use a resource explorer to view the contents of the EXE and the BPL you will find that both the DFM and the code for Form2 now reside in the package.

Delphi achieves this by statically linking in the package at compile time. (That's why you shouldn't remove the unit from the EXE project.)

Just think of what can be achieved by doing this: One could create data modules in packages and quickly modify their source and only distribute the new package when our data-access rules have changed, like when we move from BDE based connectivity to ADO. Or, we could create a from that show's a "this option is not available in this version" message in one package, and then a similarly named form that has functionality in a same-named package. We will then have a "Pro" and "Enterprise" version of our product without much effort.

Dynamic load and unload of packages

Statically linked DLLs and BPLs work fine in most cases, but what if we decide not to deploy the BPL? We would get a "The dynamic link library Package1.bpl could not be found in the specified path..." error and our application would stop functioning. Or what if, in our modular application, we wanted to have numerous plug-in like modules?

We need a way to dynamically link to the BPL at runtime.

With DLLs this is a simple process of using the LoadLibrary function.

function LoadLibrary(
  lpLibFileName: PChar): HMODULE; stdcall;

Once the DLL is loaded we can call exported functions and procedures within the DLL by using the GetProcAddress function.

function GetProcAddress(hModule: HMODULE;
  lpProcName: LPCSTR): FARPROC; stdcall;

We finally unload the dll by using the FreeLibrary function.

function FreeLibrary(hLibModule: HMODULE): BOOL;
  stdcall;

In this example we will dynamically load Microsoft's HtmlHelp library:

function TForm1.ApplicationEvents1Help(
  Command: Word; Data: Integer;
  var CallHelp: Boolean): Boolean;
type
  TFNHtmlHelpA = function(hwndCaller: HWND;
    pszFile: PAnsiChar; uCommand: UINT;
    dwData: DWORD): HWND; stdcall;
var
  HelpModule: HModule;
  HtmlHelp: TFNHtmlHelpA;
begin
  Result := False;
  HelpModule := LoadLibrary('HHCTRL.OCX');
  if HelpModule <> 0 then
  begin
    @HtmlHelp := GetProcAddress(HelpModule,
      'HtmlHelpA');
    if @HtmlHelp <> nil then
      Result := HtmlHelp(Application.Handle,
        PChar(Application.HelpFile),
        Command,
        Data) <> 0;
    FreeLibrary(HelpModule);
  end;
  CallHelp := False;
end;

Dynamically loaded BPLs

BPLs are just as simple. Well almost.

We dynamically load the package by using the LoadPackage function.

function LoadPackage(const Name: string): HMODULE;

We create TPersistentClass of the class we wish to instantiate by using the GetClass function.

function GetClass(const AClassName: string):
  TPersistentClass;

Instantiate an object of the loaded class and use it.

And when we are done, unload the package using the UnloadPackage procedure.

procedure UnloadPackage(Module: HMODULE);

Let us go back to our example and make a few changes:

  1. Select "Project1.exe" from the project manager.
  2. Right-click and select "Options..."
  3. Select the "Packages" tab.
  4. Remove "Package1" from the "Runtime packages" edit-box section and OK the options.
  5. On Delphi's toolbar, click on the "Remove file from project" button.
  6. Select "Unit2 | Form2" from the list and then "OK."
  7. Now go to the "Unit1.pas" source and remove Unit2 from its uses clause. (These steps are required to remove any link to Unit2 and the package we wish to load dynamically.)
  8. Go to the source of Button1's OnClick event.
  9. Add two variables of type HModule and TPersistentClass.
    var
      PackageModule: HModule;
      AClass: TPersistentClass;
  10. Load the package Package1 by using the LoadPackage function.
      PackageModule := LoadPackage('Package1.bpl');
  11. Check that the Package Module is not 0 (zero).
  12. Create a persistent class using the GetClass function, passing it the name of the form within the package as its parameter:
      AClass := GetClass('TForm2');
  13. If the persistent class is not nil, create and use an instance of the class just a before.
      with TComponentClass(AClass).Create(Application)
        as TCustomForm do
      begin
        ShowModal;
        Free;
      end;
  14. Finally, unload the package using the UnloadPackage procedure:
      UnloadPackage(PackageModule);
  15. Save the project.

Here is the complete listing of the OnClick event:

procedure TForm1.Button1Click(Sender: TObject);
var
  PackageModule: HModule;
  AClass: TPersistentClass;
begin
  PackageModule := LoadPackage('Package1.bpl');
  if PackageModule <> 0 then
  begin
    AClass := GetClass('TForm2');

    if AClass <> nil then
      with TComponentClass(AClass).Create(Application)
        as TCustomForm do
      begin
        ShowModal;
        Free;
      end;

    UnloadPackage(PackageModule);
  end;
end;

Unfortunately that's not the end of it.

The problem is that the GetClass function requires the class to be registered before the function can find it. Usually form classes and component classes that are referenced in a form declaration (instance variables) are automatically registered when the form is loaded. But the form isn't loaded yet. So where should we register the class? The answer: in the package. Each unit in the package is initialized when the package is loaded and finalized when the package is unloaded.

Let's return to our example and make a few changes:

  1. Double-click on "Package1.bpl" in the project manager; this will activate the package editor.
  2. Click on the + symbol next to "Unit2" in the "Contains" section. This will expand the unit tree.
  3. Double-click on "Unit2.pas" to activate the unit's source code.
  4. Scroll down to the end of the file and add an initialization section.
  5. Register the form's class using the RegisterClass procedure:
      RegisterClass(TForm2);
  6. Add a finalization section.
  7. Un-register the form's class using the UnRegisterClass procedure:
      UnRegisterClass(TForm2);
  8. Finally, save and compile the package.

Now we can safely run the "Project1" application - it will function just as before, but with the added benefit of being able to load the package when you want to.

Finally

Make sure you compile any project that uses packages (static or dynamic) with runtime packages turned on: "Project | Options | Packages | Build with runtime packages."

You must be careful that when you unload a package you destroy any objects using those classes and un-register any classes that were registered.

This procedure may help:

procedure DoUnloadPackage(Module: HModule);
var
  i: Integer;
  M: TMemoryBasicInformation;
begin
  { Make sure there aren't any instances of any
    of the classes from Module instantiated, if
    so then free them.  (This assumes that the
    classes are owned by the application) }

  for i := Application.ComponentCount - 1 downto 0 do
  begin
    VirtualQuery(
      GetClass(Application.Components[i].ClassName),
      M, SizeOf(M));
    if (Module = 0) or
      (HMODULE(M.AllocationBase) = Module) then
      Application.Components[i].Free;
  end;
  UnRegisterModuleClasses(Module);
  UnLoadPackage(Module);
end;

An application requires "knowledge" of the registered class names prior to loading the package. One way to improve this would be to create a registration mechanism to inform the application of all the class names registered by the package.

PRACTICAL EXAMPLES

Using multiple packages: Packages do not support cyclic referencing. That is, a unit cannot use another unit that already uses it. This makes it rather difficult to set value in the calling form.

The answer lies in using additional packages the both the calling object and the packaged object use. How else do you think we then set up "Application" as the owner to all our forms? The variable "Application" resides in Forms.pas, which in turn is packaged into VCL50.bpl. You will notice that your application compiles with VCL50 and your package requires VCL50.

We can use this methodology for our own package design.

In our third example we will design an application that shows customer information and optionally (dynamic load) shows customer orders.

Where can we start? Well, like all database applications, we will need connectivity. So we will create a main data module that will contain a TDataBase connection. Then we will place this data module in a package (I'll call it cst_main).

Now in our application we will create the customer form and use the DataModuleMain that we will statically link into our application by setting the compile with packages to include VCL50 and cst_main.

We then create a new package (cst_ordr) that will contain our customer orders form and data module and require our cst_main. We will then write code in our main application to dynamically load this package. Since the main data module is already loaded when the dynamic package gets loaded, it will use the application's instance of the main data module.

This is a schematic of how our application will function: 

Using swappable packages: Another example of package usage is the creation of swappable packages. One doesn't even need to use dynamically loaded packages for this! Let us assume we have the need to distribute a trail version of our application with an expiry or trial period. How would we go about doing this?

First we would create a "splash" form -- something that would show a graphic and the word "Trial" on it that will display when the application starts up. Then we would create an "about" form that would display information about our application. Lastly, we would create a function that would be called at some time to test for expiry. Then we would bundle these two forms and the function into a package and deploy it with our trial version.

For our "paid for" version we would also create "splash" and "about" forms, remembering to put the same class names (even the case), and the test function (this one doing nothing) into a package with the same name as our trial package.

What, may you ask, will this help? Well -- just think of it -- we could distribute a trial version publicly. Then when a client purchases the application we only need to send the non-trial package. This will shrink our distribution process to only one complete install and a registered package upgrade.

Packages open up many doors in the Delphi and C++Builder development world. They enable a true modular design without the overhead of passing window handles, callbacks, and other technologies in DLLs. This in turn will shorten our development cycle for modular programming. All we need do is let Delphi's package technology do the work for us.

Download the example source code of this paper here.

By Vino Rodrigues
vinorodrigues@yahoo.com



  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

Delphi 7.1 Update Release Notes=======================================================This file contains important supplemental and late-breakinginformation that may not appear in the main productdocumentation, and supersedes information contained in otherdocuments, including previously installed release notes.Borland recommends that you read this file in its entirety.NOTE: If you are updating a localized version of Delphi 7, visit the Borland Registered User web site to obtain a localized readme file that may contain important late- breaking information not included in this readme file.IMPORTANT: Delphi must be closed before installing this update. =====================================================CONTENTS * INSTALLING THIS UPDATE * UPDATING LOCALIZED VERSIONS OF DELPHI 7 * KNOWN ISSUES * ISSUES ADDRESSED BY THIS UPDATE - IDE - CORE DATABASE - DATASNAP - DBGO (ADO COMPONENTS) - dbExpress - dbExpress COMPONENTS AND DB VCL - dbExpress CORE DRIVER AND METADATA - dbExpress VENDOR ISSUES - dbExpress CERTIFICATION - WEB SNAP - ACTIVEX - COMPILER - RTL - VCL - THIRD PARTY - BOLD FOR DELPHI * VERIFYING THAT THE UPDATE WAS SUCCESSFUL * FILES INSTALLED BY THIS UPDATE =======================================================INSTALLING THIS UPDATE* This update can not be applied to Delphi 7 Architect Trial version. * This update can not be removed after it is installed.* You will need the original Delphi 7 installation CD available to install this update.* To install this update from the CD, insert the CD, and launch the d7_ent_upd1.exe file appropriate for your locale.* To install this update from the Web, double-click the self-executing installation file and follow the prompts. * The Delphi 7 documentation PDF files are available on the update CD.========================================================UPDATING LOCALIZED VERSIONS OF DELPHI 7* This update can be applied only to the English version of Delphi 7. There are separate updates for the German, French and Japanese versions of Delphi 7. * This update provides new localized versions of the SqlConst files. After installing the update, backup and delete the following files from the Delphi 7 installation folder: LibDebugSqlConst.dcu LibSqlConst.dcu SourceVclSqlConst.pas and then remove the appropriate locale extension (.de, .fr, or .jp) from the new SqlConst files in the same folders. For example, for the French version of Delphi, rename SqlConst.dcu.fr to SqlConst.dcu. ========================================================KNOWN ISSUES* dbExpress driver - After installing this update, the dbxdrivers.ini file will not contain an entry for MSSQL=1. If you require that entry, please edit the ini file manually after installing the update. By default, dbxdrivers.ini is located at C:Program FilesCommon FilesBorland SharedDBExpress. * If you have updated any Borland packages in the system32 directory with unofficial patches or updates from CodeCentral, MSI might revert (auto-repair) those packages to their previous version during installation of this update. Therefore, after installing this update, you may need to re-install unofficial patches or updates. * Due to a Windows Help engine limitation on Windows 98 and Millennium, the Help system Index tab will be empty if the index exceeds 32,767 keywords. If you encounter an empty Help Index tab after installing this update, open the d7.ohi file in the Delphi7Help folder and comment out one or more of the index entries by changing the colon in column one to a semi-colon, as shown here: ;Index Open Tools API (IOTA)=d7iota.hlp Save the d7.ohi file and delete any hidden *.GID files in your Delphi7/Help folder before restarting the Help. This modification reduces the number of index keywords, but does not affect other Help system functionality, such as cross-file linking or F1 accessibility. ========================================================ISSUES ADDRESSED BY THIS UPDATEThis readme lists the maintenance for all editions of Delphi 7;not all of the features mentioned in this file are available inall editions of the product.This update resolves the following issues:IDE* Using the up/down arrow keys to navigate and select items from the Code Completion window sometimes skips items (Quality Central 2875). * In the Project Manager, units are incorrectly displayed in the order that they are listed in the USES clause, rather than alphabetically. * Using collections containing component references and form inheritance can result in incorrect references being stored in the dfm file.======================================================= CORE DATABASE* TFMTBCDField initializes to size 8 instead of size 4, allowing the system to initialize precision to 7 and size to 8 (Quality Central 5938). * Using a TDBLookupComboBox to display a list of data given by a detail TQuery results in the error "Field ‘‘ not found" (Quality Central 5384 and 4823). * TDBRadioGroup maintains its focus on the most recently selected item, even after an edit has been canceled (Quality Central 2109). =======================================================DATASNAP* After deleting a row from a TClientDataset, sometimes the delta dataset still contains a record. This happens if you populate the Nested Dataset field before populating another field that precedes it in the field order. * The TClientDataSet.ApplyUpdates method fails if the dataset contains only changes to fields that have the ProviderFlags.pfnUpdate property set to False (Quality Central 2338). * TClientDataSet does not order correctly on a TLargeIntField when used in an index or in the IndexFieldNames property (Quality Central 1050 & 2626) * TAggregateField returns an incorrect value after a filter was used and then cleared (Quality Central 1712). * A "Key violation" exception may incorrectly be generated when using poFetchDetailsOnDemand with a nested dataset that also has an InternalCalc field (Quality Central 2011). * TClientDataSet may contain invalid Delta entries when using poPropogateChanges. (Quality Central 2019 & 2333). * Editing the value of an InternalCalc field on a nested TClientDataset causes the ChangeCount property of the parent dataset to increase (Quality Central 2027). * A TLargeIntField cannot be used as a linking field in a master/detail relationship. Doing so results in the error "Cannot access field <fieldname> as type variant." * TClientDataSet doesn‘t save data to file when FileName is set and there is no existing file on disk (Quality Central 2307). * Using the Delphi 7 version of midas.dll to open an XML file that was saved with the Delphi 6 version of midas.dll results in an illegal operation. * Incorrect filter expression parsing occurs when parsing a value that contains a quote in TClientDataSet. The expression parser incorrectly treats the rest of the expression as a formula (Quality Central 1266). * TClientDataSet.ChangeCount will return an incorrect value when editing the value of a TStringField or a TWideStringField and then reverting it to the original value (Quality Central 2717 & 4508). * Canceling an update to an individual field by assigning the "unassigned" (varEmpty) value to TField.NewValue in the TDataSetProvider.BeforeUpdateRecord event handler does not work (Quality Central 3660). * TClientDataset InternalCalc fields are reset to null after calling the ApplyUpdates method when using poPropogateChanges (Quality Central 3777). * When using incremental fetching on a TClientDataset with parameters, the associated TDatasetProvider will repeatedly return the same set of records (Quality Central 3515). * TClientDataset.FindKey will fail with an list index error when used on a cloned nested dataset (Quality Central 3786). * When the size of a Persistent field in TClientDataSet is set too large, it overwrites neighboring fields upon Post (Quality Central 3974). * TDataSetProvider generates incorrect SQL in response to a RefreshRecord request in some cases and fails to update all fields properly (Quality Central 4014). * When TDataSetProvider obtains the DB ‘current‘ values after an update conflict, it does so against the wrong fields (Quality Central 4006). * TClientDataSet.Delete fails with the error "Cannot delete master record with details" even when all of the details are deleted if the detail table was previously cloned (Quality Central 5646). * In some cases, records may disappear from a nested TClientDataset after performing edits, applying updates and calling refresh (Quality Central 7287). * When multiple indexes are included with the data from a provider, the IndexDef entries in the TClientDataset will show duplicate ‘Fields‘ and ‘DescFields‘ values (Quality Central 7543). * When updating blob fields in a TClientDataset with the LogChanges property set to False, blob data is lost from other unrelated records (Quality Central 6591). * Using a Filter or Locate with a TLargeIntField on a TClientDataSet will always fail with the error "Constant is not correct type". (Quality Central 6142 & 3496). * Calling the CancelRange method on nested TClientDataset will cause all records for every master record to be displayed (Quality Central 4301). * When using RefreshRecord on a Memo or Blobfield and the field has been modified by another user, the blobsize of that field does not change if it is less than before (Quality Central 4676).* Calling the TClientDataset.Locate method on a TWordField always returns false (Quality Central 5319).* Using the TDataSetProvider poFetchDetailsOnDemand option with a server-side master/detail definition (nested dataset on the client side) raises an exception when the master TClientDataset is opened (Quality Central 5707).* TClientDataset may create an incorrect delta when inserting new master and detail records and then editing the same master record a second time (Quality Central 6849). * The assignment of a LargeInt field to another LargeInt field fails when the destination and source are both TLargeIntFields (Quality Central 6393).* When Params are passed from a TClientDataSet to a TDatasetProvider, the Size,Precision, and NumericScale property settings are lost (Quality Central 6308). * TClientDataSet allocates values against nested dataset AutoInc fields but it should not (Quality Central 5509).* When using a TimeStamp type parameter with a TClientDataSet an error occurs when the parameter is passed to the server (Quality Central 6372). * Setting MTSDataModule.AutoComplete to False in the IDE is overridden and set back to True at run time (Quality Central 4716).* Calls to ApplyUpdates(-1) on a TMTSDataModule do not work properly (Quality Central 6906). =======================================================DBGO (ADO Components)* Using TParameter.Assign(TParam) or TParam.Assign(TParameter) causes incorrect settings of the Size, NumericScale, and Precision properties (Quality Central 6366). * When values in persistent TMemoFields are returned after reading a row of a TADOTable, the values are truncated at the first occurrence of #0 (Quality Central 2771). * When using TADOQuery to get a result set from a SQL query, the SQL statement gets prepared but never gets unprepared Quality Central 3635). * With a query, when using cursorType set to ctOpenForwardOnly and cursorLocation set to clUseServer, the "First" method will move the cursor position to the second record (Quality Central 4769). * Setting the value of a TLargeInt field to a negative value in an ADODataSet and calling Post results in the error "Multiple- step operation generated errors. Check each status value" (Quality Central 2106). * When using a SQL Server 2000 table with a BigInt or decimal columns, negative values are incorrectly returned as positive values by ADO components (Quality Central 2379 & 998).=======================================================dbExpress COMPONENTS* When including the line delimiter ";" at the end of a select statement in TSQLQuery, then using the query and a TDataProvider to give data to a CDS, you cannot apply updates without encountering a the syntax error "Token unknown."* Updating on a TSQLQuery with either a WHERE clause or when adding a delimiter ";" results in the error "Unable to find record, no key specified." * When using TSQLConnection and TSimpleDataSet to access a MySQL database, it is impossible to add new records to a table that has an auto-increment primary key (Quality Central 5465). * When using the MySql driver, erroneous state information about the number of active statements with respect to a TSQLConnection might result in a transaction starting on one connection and a commit or rollback happening on another connection (Quality Central 1074). * Updating on TSQLQuery with either a WHERE clause or when adding a delimiter ";" results in the error "Unable to find record, no key specified" (Quality Central 5550). * When using TSQLQuery to add calculated fields, OnCalcFields fails on the first record, because all of the fields in the first record are empty after OnCalcFields is called (Quality Central 1328). * Calling TSQLConnection.getTableNames() to retrieve system tables takes too long.* Using TSQLConnection.CloneConnection may result in the loss of the TableScope status for a new connection (Quality Central 5867).=======================================================dbExpress CORE DRIVER AND METADATA* DB2 V8 Support - Index Metadata retrieval: (Quality Central 4150) Querying for a table with a unique index fails with "Cannot convert a variant of type (Null) to type (String)"* DB2 V8 Support - Fetching a stored procedure parameter fails.* MySQL 4.0.x support (Quality Central 3731).* MySQL driver supports only the default Port (Quality Central 3736).* MySQL SQLCommand.GetRowsAffected returns 0 on successful updates (Quality Central 4504).* MySQL TimeStamp comes back as NOT NULL always (Quality Central 4689).* MySQL metadata causing data truncation (Quality Central 4160).* AV on SQLCommand.Close() in MySQL driver (Quality Central 5819).* MySQL metadata is retrieved from wrong database (Quality Central 4130).* An MSSQL stored procedure with long names causes memory corruption (Quality Central 3225).* The MSSQL driver leaks resources on repeated SQL execution (Quality Central 4059).* MSSQL TimeStamp fraction part rounding error while fetching data.* MSSQL - ExecDirect() does not return the RowsAffected.* MSSQL return parameter is not available from a stored procedure returning cursor/cursors (Quality Central 3763).* An MSSQL stored procedure with no parameters causes memory corruption.* An MSSQL stored procedure does not return @@IDENTITY after a SP execution. The identity value is returned only on the third execution.* ORACLE Functions are now supported (Quality Central 4051).* ORACLE SQLCommand.getParameter() always returns the NULL indicator as True (Quality Central 4018).* InterBase - Support for BOOLEAN data type has been added.=======================================================dbExpress VENDOR ISSUES* MySQL - Data truncation resulted as the cursor level metadata is incorrect. MySQLField.length is 1024 for the second columns after describing the SQL "Show create table tablename". - (Quality Central - 1810)* MSSQL - SubQuery parameter binding causes an AV in MSVCRT7.DLL (Quality Central 2767) - MS bug. Case # SRX030728604937.* MSSQL Null parameter binding on a NOT NULL INTEGER columns fails with a SQL Error "SQL State:HY000, SQLError Code:0 Invalid input parameter values" - MS bug Case #SRX030728605044. dbExpress MSSQL driver calls IDBCommand.Prepare() and that seems to cause this bug in SQLOLEDB.DLL.=======================================================dbExpress CERTIFICATIONdbExpress has been certified with the following databaseversions:InterBase 7.1 (*Driver should also work with InterBase 6.5, 7.0)Oracle 9.1.0 (*Driver should also work with ORACLE 9.2.0)DB2 UDB 8.x (*Driver should also work with DB2 V7)MSSQL 2000Informix 9.xMySQL 4.0.18 * The driver should work with these database versions, however, it has not been fully certified with these versions. =======================================================INTERNET/WEBSNAP* Procedure TSockWebResponse.SendResponse contains code that causes an incomplete response. =======================================================ACTIVEX* On Windows 98 SE, registering an OLE-server on a a shared mapped drive and then starting the program from a non-UNC path drive results in an endless loop (Quality Central 3151). * ShortToLongFileName fails on some UNC paths, which makes TComServer fail when the executable is located on a remote computer (Quality Central 3049). * Additional methods begin with GhostMethod_ are added to interface declarations which would not appear in Delphi 6 (Quality Central 3426). * SetOlePicture distorts the target TPicture size (Quality Central 4137).======================================================= COMPILER* Assigning a partially empty multi-dimensional dynamic array to a variant causes an access violation. * Converting an empty dynamic array to a variant array results in a non-empty variant array with the wrong bounds. * Assert fails to break and leaves an FPU invalid op exception set (Quality Central 5248). * Under some circumstances, optimization causes an access violation on a call to a dynamic + safecall method (Quality Central 5071). =======================================================RTL* In System.pas, function LoadResString(ResStringRec: PResStringRec): string; has a hard-coded buffer of 1024 characters, which causes resource string table entries in excess of 1023 characters to be truncated (Quality Central 7581). * On Windows Server 2003, calls to SysUtils.GetEnvironmentVariable fail with an access violation wHen the requested environment variable does not exist (Quality Central 4319). * When a variant array item is a string with embedded null characters (#0), Delphi treats those items as null-terminated strings when the string is assigned to an item of variant array (Quality Central 6078). =======================================================VCL* Context and keyword help does not fire for the OnHelp events.* Selecting a zero length (empty) item in drop-down combo box results in an access violation in ntdll.dll. * Attempting to delete a single item from the TComboBoxEx ItemEx list, that item and the next item are deleted (Quality Central 3991). * Calling TBitmap.Assign(nil) may result in a GDI resource leak (Quality Central 2511). * TRegistry class leaks a register key handle if LazyWrite is set to False. * THashedStringList ignores the NameValueSeparator property (Quality Central 5632). * In a DBCS environment, an exe filename that includes DBCS characters often garbles Application.Title (Quality Central 5089). * Menu items and images are sometimes drawn partially in black on Windows XP systems that have themes disabled (Quality Central 2341). * When the ValueListEditor Visible property is set to False, making it visible and adding a string at runtime may cause an access violation (Quality Central 4953). * When connected to a network printer and the system hosting the network printer is offline, Printer.PageWidth may cause an access violation in GDI32.DLL (Quality Central 757).* The OldCreateOrder property for a form that inherits from another form is automatically set to True when the form is saved (Quality Central 1675). * When ending a Windows session (either by using Log Off or Shut Down) while a VCL-based Delphi application is running, no OnDestroy events on the application‘s forms are called, nor are any finalization sections executed. This may result in lost data and user settings (Quality Central 5332). ======================================================= THIRD PARTY - BOLD FOR DELPHI* SQLDatabaseConfig now contains settings for database evolution scripts (separator, terminator and commands for transaction start/commit). Logs can be saved from the evolution dialog (Quality Central 4679). * BoldSelectChangeAction in BoldComboBox is now triggered more appropriately on incremental searches (Quality Central 2827).* A potential infinite recursion problem in TBoldUnOrderedIndexableList.KnowsSupportsNil has been fixed.* An assert with side-effects in TBoldObjectList.GetBoldObject has been changed. This affects debug dcus only.* TBoldUMLModelValidator.ValidateClass no longer has a bad format string for one error. * TBoldDbDataValidator.Validate no longer validates without running any tests when not connected to a database.* DBDataValidation no longer fails on parent or child mapped classes. * Performance of XMI Import has been improved (Quality Central 2827) .* XMI Export now correctly exports multiplicity 0..n. * Transaction grouping in optimistic locking has been improved by performing checks in the same transaction as the update (Quality Central 3123).* A memory leak in the Object Lending Library has been fixed (Quality Central 3648).* Several issues with BoldGrid and goTabs have been resolved (Quality Central 3903 and 3904).* Saving modified multilinks no longer yields an index out of bounds condition under certain conditions (Quality Central 4870).* BoldSystemDebuggerForm no longer yields an access violation on the second invocation from a Bold Action (Quality Central 6482).* Certain combinations of tableMapping=Child and abstract classes have been improved (Quality Central 7110).* The OCL operation includesAll no longer returns false when it should return true (Quality Central 3146).* An Import problem with "Error: Class is already a relation class for another association" has been fixed (Quality Central 3093).* TBoldEnvironmentConfiguration.DeactivateQueue no longer yields an access violation during finalization (Quality Central 3227).* An access violation in BoldMemoryManager during finalization of multi-threaded applications has been fixed.* Model validation no longer incorrectly warns against parent mapped classes with derived attributes not allowing null.* Relating objects belonging to different Bold systems is no longer allowed.* Instructions for compiling IDL files have been improved. =======================================================VERIFYING THAT THE UPDATE WAS SUCCESSFULThe final dialog of the update installer indicates whether theupdate was successful. You can also:* Open Delphi 7 and use "Help | About" to display the About Box. The product version should be: Version 7.0 (Build 8.1) (Before applying the update, the version is 7.0 (Build 4.453).) * Use the file list in "FILES INSTALLED BY THIS UPDATE" below to verify that the correct file versions are installed on your machine. =======================================================FILES INSTALLED BY THIS UPDATEThis update adds or updates the following Delphi files. Thefollowing list includes files for all editions of Delphi.By default, <InstallDir> is C:Program FilesDelphi7.Version Path and File Name------- ------------------7.0.8.1 <InstallDir>incoreide70.bpl7.1.1523.17956 <InstallDir>indbexpdb2.dll7.1.1523.17956 <InstallDir>indbexpInf.dll7.1.1523.17956 <InstallDir>indbexpInt.dll7.1.1523.17956 <InstallDir>indbexpmss.dll7.1.1523.17956 <InstallDir>indbexpmysql.dll7.1.1692.666 <InstallDir>indbexpora.dll7.0.8.1 <InstallDir>indcc32.exe7.0.8.1 <InstallDir>indcc70.dll7.0.8.1 <InstallDir>indclclxdb70.bpl7.0.8.1 <InstallDir>indcldb70.bpl7.0.8.1 <InstallDir>indcldbx70.bpl7.0.8.1 <InstallDir>indelphi32.exe7.0.8.1 <InstallDir>indesignide70.bpl7.0.8.1 <InstallDir>indfm70.bpl7.0.8.1 <InstallDir>inorbpas45.dll7.0.8.1 <InstallDir>in lib70.bpl7.0.8.1 Borland SharedDebuggerDCC70.dll <InstallDir>libidl45corba.dcu <InstallDir>libADODB.dcu <InstallDir>libadortl.dcp <InstallDir>libaxctrls.dcu <InstallDir>libcomctrls.dcu <InstallDir>libComServ.dcu <InstallDir>libDB.dcu <InstallDir>libDBClient.dcu <InstallDir>libDBCommon.dcu <InstallDir>libDBCtrls.dcu <InstallDir>libdbExpDB2.dcu <InstallDir>libdbExpINT.dcu <InstallDir>libdbExpMySQL.dcu <InstallDir>libdbExpORA.dcu <InstallDir>libdbexpress.dcp <InstallDir>libdbrtl.dcp <InstallDir>libDBXpress.dcu <InstallDir>libdsnap.dcp <InstallDir>libdsnapcon.dcp <InstallDir>libForms.dcu <InstallDir>libgraphics.dcu <InstallDir>libIniFiles.dcu <InstallDir>libmenus.dcu <InstallDir>libMidasLib.dcu <InstallDir>libMtsRdm.dcu <InstallDir>libPrinters.dcu <InstallDir>libProvider.dcu <InstallDir>lib egistry.dcu <InstallDir>lib tl.dcp <InstallDir>libSqlConst.dcu <InstallDir>libSqlConst.dcu.de <InstallDir>libSqlConst.dcu.fr <InstallDir>libSqlConst.dcu.jp <InstallDir>libSqlExpr.dcu <InstallDir>libStdCtrls.dcu <InstallDir>libsystem.dcu <InstallDir>libsysutils.dcu <InstallDir>libValEdit.dcu <InstallDir>libVariants.dcu <InstallDir>libvcl.dcp <InstallDir>libvcldb.dcp <InstallDir>libdebugADODB.dcu <InstallDir>libdebugaxctrls.dcu <InstallDir>libdebugcomctrls.dcu <InstallDir>libdebugcomserv.dcu <InstallDir>libdebugDB.dcu <InstallDir>libdebugDBClient.dcu <InstallDir>libdebugDBCommon.dcu <InstallDir>libdebugDBCtrls.dcu <InstallDir>libdebugDBXpress.dcu <InstallDir>libdebugForms.dcu <InstallDir>libdebuggraphics.dcu <InstallDir>libdebuginifiles.dcu <InstallDir>libdebugmenus.dcu <InstallDir>libdebugMtsRdm.dcu <InstallDir>libdebugprinters.dcu <InstallDir>libdebugProvider.dcu <InstallDir>libdebug egistry.dcu <InstallDir>libdebugSqlConst.dcu <InstallDir>libdebugSqlConst.dcu.de <InstallDir>libdebugSqlConst.dcu.fr <InstallDir>libdebugSqlConst.dcu.jp <InstallDir>libdebugSqlExpr.dcu <InstallDir>libdebugstdctrls.dcu <InstallDir>libdebugsystem.dcu <InstallDir>libdebugsysutils.dcu <InstallDir>libdebugValEdit.dcu <InstallDir>libdebugvariants.dcu <InstallDir>libdebugidl45Corba.dcu <InstallDir>source tlcommonComServ.pas <InstallDir>source tlcommonIniFiles.pas <InstallDir>source tlcommon egistry.pas <InstallDir>SourceRtlCorba45corba.pas <InstallDir>source tlsyssysutils.pas <InstallDir>source tlsysVariants.pas <InstallDir>sourcevclADODB.pas <InstallDir>sourcevclaxctrls.pas <InstallDir>sourcevclcomctrls.pas <InstallDir>sourcevclDB.pas <InstallDir>sourcevclDBClient.pas <InstallDir>sourcevclDBCommon.pas <InstallDir>sourcevclDBCtrls.pas <InstallDir>sourcevclDBXpress.pas <InstallDir>sourcevclForms.pas <InstallDir>sourcevclgraphics.pas <InstallDir>sourcevclmenus.pas <InstallDir>sourcevclMtsRdm.pas <InstallDir>sourcevclPrinters.pas <InstallDir>sourcevclProvider.pas <InstallDir>sourcevclSqlConst.pas <InstallDir>sourcevclSqlConst.pas.de <InstallDir>sourcevclSqlConst.pas.fr <InstallDir>sourcevclSqlConst.pas.jp <InstallDir>sourcevclSqlExpr.pas <InstallDir>sourcevclStdCtrls.pas <InstallDir>sourcevclValEdit.pas 7.0.8.1 Windowssystem32adortl70.bpl7.0.8.1 Windowssystem32dbexpress70.bpl 7.0.8.1 Windowssystem32dbrtl70.bpl7.0.8.1 Windowssystem32dsnap70.bpl7.0.8.1 Windowssystem32dsnapcon70.bpl7.0.8.1 Windowssystem32 tl70.bpl7.0.8.1 Windowssystem32vcl70.bpl7.0.8.1 Windowssystem32vcldb70.bpl7.1.1692.666 Windowssystem32midas.dll 7.0.8.1 Common FilesBorland SharedDebuggerdcc70.dll======================================================Copyright (c) 2004 Borland Software Corporation.All rights reserved.
相关推荐
FastReport.v4.15 for.Delphi.BCB.Full.Source企业版含ClientServer中文修正版支持Delphi 4-XE5 and C++Builder 6-XE5. D2010以上版本(D14_D19)安装必读 delphi2010以上版本(D14_D19)使用者安装时,请将res\frccD14_D19.exe更名名为frcc.exe frccD14_D19.exe是专门的delphi2010以上版本(D14_D19)编码器。其他低delphi版本,请使用frcc.exe FastReport® VCL is an add-on component that allows your application to generate reports quickly and efficiently. FastReport® provides all the tools necessary for developing reports, including a visual report designer, a reporting core, and a preview window. It can be used in Embarcadero (ex Borland and CodeGear) Delphi 4-XE5 and C++Builder 6-XE5. version 4.15 --------------- + Added Embarcadero RAD Studio XE5 support + Added Internal components for FireDac database engine + fixed bug with images in PDF export for OSX viewers + Added ability to set font charset to default in Style Editor - fixed duplex problem when printing several copies of the report - fixed problem with PNG images - fixed problem with TfrxPictureView transparent version 4.14 --------------- + Added Embarcadero RAD Studio XE4 support - [Lazarus] fixed bug with text output - [Lazarus] fixed bug with some visual controls in designer - [Lazarus] improved interface of the report preview and designer - [Lazarus] fixed bug with boolean propertyes in script code and expressions - fixed bug with endless loop in TfrxRichView - fixed bug with Unicode in TfrxMemoView appeared in previous release - improved MAPI interface in TfrxExportMail export - fixed some problems with allpication styles XE2/XE3 - improved compatibility with Fast Report FMX version 4.13 --------------- + Added Lazarus Beta support starts from Fast Report Professionnal edition. Current version allows preview, print and design report template under Windows and Linux platform (qt). + Added Embarcadero RAD Studio XE3 support - fixed compatibility with Fast Report FMX installed in the same IDE. This version can co exist with Fast Report FMX version at the same time. + published "Quality" property of TfrxPDFExport object + published "UseMAPI" property of TfrxExportMail object + published "PictureType" property to ODF export - fixed bug with expressions in RichEdit - fixed bug in multi-column reports - fixed exception in the report designer - fixed bug with URLs in Open Document Text and Open Document Spreadsheet exports - fixed format string in XLS OLE export - fixed format string in XLS BIFF8 export - fixed output of the check boxes on the highlighted lines in PDF export - fixed bug with PDF anchors - fixed bug when using two or more macroses in memo version 4.12 --------------- + added support of Embarcadero Rad Studio EX2 (x32/x64) + added export of Excel formulas in the BIFF export + added export of external URLs in the PDF export + added converter from Rave Reports ConverterRR2FR.pas + added Cross.KeepRowsTogether property + optimised merging cells in the BIFF export + added property DataOnly to exports + pictures format in all exports switched to PNG + improved number formats processing in the BIFF export + added property DataOnly to exports + added property TfrxODFExport.SingleSheet + added property TfrxSimpleTextExport.DeleteEmptyColumns + added property TfrxBIFFExport.DeleteEmptyRows + added progress bar to the BIFF export - fixed bug with frame for some barcode types - fixed wrong metafiles size in the EMF export - fixed processing of negative numbers in the OLE export - fixed bug in handling exceptions in the OLE export - fixed bug in creation of the progress bar (applicable to many exports) - fixed bug in the ODF export in strings processing - fixed bug in the OLE export in numbers formatting - fixed bug in the PDF export in rotating texts 90, 180 and 270 degrees - fixed bug in the ODF export in processing of headers and footers - fixed bug in the Text export in computing object bounds - fixed bug in the ODF export in UTF8 encoding - fixed hiding gridlines around nonempty cells in the BIFF export - fixed images bluring when exporting - fixed word wrapping in the Excel XML export version 4.11 --------------- + added BIFF8 XLS export filter + added to ODF export the Language property + [enterprise] added "scripts" folder for additional units ("uses" directive in report script) + [enterprise] added logs for scheduler (add info in scheduler.log) + [enterprise] added property "Reports" - "Scripts" in server configuration - set the path for "uses" directive in report script + [enterprise] added property "Http" - "MaxSessions" in server configuration - set the limit of maximum session threads, set 0 for unlimit + [enterprise] added property "Reports" - "MaxReports" in server configuration - set the limit of maximum report threads, set 0 for unlimit + [enterprise] added property "Logs" - "SchedulerLog" in server configuration - set the scheduler log file name + [enterprise] added property "Scheduler" - "Active" in server configuration - enable of scheduler + [enterprise] added property "Scheduler" - "Debug" in server configuration - enable writing of debug info in scheduler log + [enterprise] added property "Scheduler" - "StudioPath" in server configuration - set the path to FastReport Studio, leave blank for default - [enterprise] fixed bug with MIME types in http header (content-type) - [enterprise] fixed bug with default configuration (with missed config.xml) - [enterprise] fixed bug with error pages - fixed bug in XML export with the ShowProgress property - fixed bug in RTF export with font size in empty cells - fixed bug in ODF export with UTF8 encoding of the Creator field - fixed bug in XML export with processing special characters in strings - fixed bug in ODF export with properties table:number-columns-spanned, table:number-rows-spanned - fixed bug in ODF export with the background clNone color - fixed bug in ODF export with a style of table:covered-table-cell - fixed bug in ODF export with table:covered-table-cell duplicates - fixed bug in ODF export with excessive text:p inside table:covered-table-cell - fixed bug in ODF export with language styles - fixed bug in ODF export with spaces and tab symbols - fixed bug in ODF export with styles of number cells - fixed bug in ODF export with the background picture - fixed bug in ODF export with charspacing - fixed bug in ODF export with number formatting - fixed bug in ODF export with table-row tag - fixed bug in XLS(OLE) export with numbers formatting - fixed bug in RTF export with processing RTF fields - fixed bug with processing special symbols in HTML Export - fixed bug with UTF8 encoding in ODF export - fixed bug in PDF export with underlined, struck-out and rotated texts version 4.10 --------------- + added support of Embarcadero Rad Studio XE (Delphi EX/C++Builder EX) + added support of TeeChart 2010 packages (new series type aren't support in this release) + added a property TruncateLongTexts to the XLS OLE export that allows to disable truncating texts longer than a specified limit + added option EmbedProt which allows to disable embedding fonts into an encrypted PDF file + added TfrxDateEditControl.WeekNumbers property - fixed bug in XML and PDF exports with Korean charmap - fixed bug in the XLS XML export about striked-out texts - fixed bug about exporting an empty page via the XLS OLE export - fixed bug in the PDF export about coloring the background of pages - fixed bug in embedded designer when using break point in script - fixed bug with lost of focus in font size combo-box in designer - fixed bug with truncate of font size combo-box in Windows Vista/7 in designer (lost of vertical scroll bar) - fixed bug when lost file name in inherited report - fixed bug in multi-page report with EndlessHeight/EndlessWidth - fixed bug wit TfrxHeader.ReprintOnNewpage and KeepTogether - fixed bug in multi-column report with child bands - improved split mechanism (added TfrxStretcheable.HasNextDataPart for complicated data like RTF tables) - improved crosstab speed when using repeat band with crosstab object version 4.9 --------------- + added outline to PDF export + added anchors to PDF export - fixed bug with embedded TTC fonts in PDF export + added an ability to create multiimage TIFF files + added export headers/footers in ODF export + added ability to print/export transparent pictures (properties TfrxPictureView.Transparent and TfrxPictureView.TransparentColor) (PDF export isn't supported) + added new "split to sheet" modes for TfrxXMLExport + added support of /PAGE tag in TfrxRichView, engine automatically break report pages when find /PAGE tag + added ability to hide Null values in TfrxChartView (TfrxChartView.IgnoreNulls = True) + added ability to set any custom page order for printing (i.e. 3,2,1,5,4 ) + [enterprise] added variables "AUTHLOGIN" and "AUTHGROUP" inside the any report + [enterprise] now any report file can be matched with any (one and more) group, these reports are accessible only in matched groups + [enterprise] now you can set-up cache delays for each report file (reports.xml) + [enterprise] added new properties editor for reports in Configuration utility (see Reports tab) + [enterprise] added property "Xml" - "SplitType" in server configuration - allow to select split on pages type between none/pages/printonprev/rowscount + [enterprise] added property "Xml" - "SplitRowsCount" in server configuration - sets the count of rows for "rowscount" split type + [enterprise] added property "Xml" - "Extension" in server configuration - allow select between ".xml" and ".xls" extension for output file + [enterprise] added property "Html" - "URLTarget" in server configuration - allow select the target attribute for report URLs + [enterprise] added property "ReportsFile" - path to file with reports to groups associations and cache delays + [enterprise] added property "ReportsListRenewTimeout" in server configuration + [enterprise] added property "ConfigRenewTimeout" in server configuration + [enterprise] added property "MimeType" for each output format in server configuration + [enterprise] added property "BrowserPrint" in server configuration - allow printing by browser, added new template nav_print_browser.html + [enterprise] added dynamic file name generation of resulting formats (report_name_date_time) * [enterprise] SERVER_REPORTS_LIST and SERVER_REPORTS_HTML variables (list of available reports) depend from user group (for internal authentification) + added drawing shapes in PDF export (not bitmap) + added rotated text in PDF export (not bitmap) + added EngineOptions.IgnoreDevByZero property allow to ignore division by zero exception in expressions + added properties TfrxDBLookupComboBox.DropDownWidth, TfrxDBLookupComboBox.DropDownRows + added event TfrxCustomExportFilter.OnBeginExport + added ability to decrease font size in barcode object + added ability to inseret FNC1 to "code 128" barcode + added event TfrxPreview.OnMouseDown + added support of new unicode-PDF export in D4-D6 and BCB4-BCB6 * improved AddFrom method - anchor coping - fixed bug with WordWrap in PDF export - fixed bug with underlines in PDF export - fixed bug with rounded rectangles in PDF export - fixed CSV export to fit to the RFC 4180 specification - fixed bug with strikeout text in PDF export - fixed bug with incorrect export of TfrxRichView object in RTF format (wrong line spacing) - [enterprise] added critical section in TfrxServerLog.Write - fixed bug with setting up of the Protection Flags in the PDF export dialog window - fixed bug in PDF export (file structure) - fixed bug with pictures in Open Office Writer (odt) export - [enterprise] fixed bug with TfrxReportServer component in Delphi 2010 - fixed minor errors in Embarcedero RAD Studio 2010 - fixed bug with endless loop with using vertical bands together with page header and header with ReprintOnNewPage - fixed bug when using "Keeping" and Cross tables (incorrect cross transfer) - fixed bug with [CopyName#] macros when use "Join small pages" print mode - fixed bug when try to split page with endless height to several pages (NewPage, StartNewPage) - fixed bug with empty line TfrxRichView when adding text via expression - fixed bug when Footer prints even if main band is invisible (FooterAfterEach = True) - fixed resetting of Page variable in double-pass report with TfrxCrossView - fixed bug with loosing of aligning when split TfrxRichView - fixed buzz in reports with TfrxRichView when using RTF 4.1 version 4.8 --------------- + added support of Embarcadero Rad Studio 2010 (Delphi/C++Builder) + added TfrxDBDataset.BCDToCurrency property + added TfrxReportOptions.HiddenPassword property to set password silently from code + added TfrxADOConnection.OnAfterDisconnect event + added TfrxDesigner.MemoParentFont property + added new TfrxDesignerRestriction: drDontEditReportScript and drDontEditInternalDatasets + adedd checksum calculating for 2 5 interleaved barcode + added TfrxGroupHeader.ShowChildIfDrillDown property + added TfrxMailExport.OnSendMail event + added RTF 4.1 support for TfrxRichText object + [enterprise] added Windows Authentification mode + added confirmation reading for TfrxMailExport + added TimeOut field to TfrxMailExport form + added ability to use keeping(KeepTogether/KeepChild/KeepHeader) in multi-column report + added ability to split big bands(biggest than page height) by default * [enterprise] improved CGI for IIS/Apache server * changed PDF export (D7 and upper): added full unicode support, improved performance, decreased memory requirements old PDF export engine saved in file frxExportPDF_old.pas - changed inheritance mechanism, correct inherits of linked objects (fixups) - fixed bug with Mirror Mrgins in RTF, HTML, XLS, XML, OpenOffice exports - fixed bug when cross tab cut the text in corner, when corner height greater than column height - [fs] improved script compilation - improved WatchForm TListBox changet to TCheckListBox - improved AddFrom method - copy outline - Improved functional of vertical bands, shows memos placed on H-band which doesn't across VBand, also calculate expression inside it and call events (like in FR2) - Improved unsorted mode in crosstab(join same columns correctly) - Improved converter from Report Builder - Improved TfrxDesigner.OnInsertObject, should call when drag&drop field from data tree - improved DrillDownd mechanism, should work correct with master-detail-subtetail nesting - fixed bug with DownThenAcross in Cross Tab - fixed several bugs under CodeGear RAD Studio (Delphi/C++Builder) 2009 - fixed bug with emf in ODT export - fixed bug with outline when build several composite reports in double pass mode - fixed bug when group doesn't fit on the whole page - fixed "Page" and "Line" variables inside vertical bands - fixed bug with using KeepHeader in some cases - fixed bug with displacement of subreport when use PrintOnParent property in some cases - fixed small memory leak in subreports - fixed problem with PageFooter and ReportSymmary when use PrintOnPreviousPage property - fixed bug when designer shows commented functions in object inspector - fixed bug when designer place function in commented text block - fixed bug when Engine try to split non-stretcheable view and gone to endless loop - fixed bug with HTML tags in memo when use shot text and WordWrap - [enterprise] fixed bug with variables lost on refresh/export - fixed bug whih PDF,ODT export in Delphi4 and CBuilder4 - fixed bug with some codepage which use two bytes for special symbols (Japanese ans Chinese codepages) - fixed bug when engine delete first space from text in split Memo - fixed bug in multi-column page when band overlap stretched PageHeader - fixed bug with using ReprintOnNewPage version 4.7 --------------- + CodeGear RAD Studio (Delphi/C++Builder) 2009 support + [enterprise] enchanced error description in logs + added properties TfrxHTMLExport.HTMLDocumentBegin: TStrings, TfrxHTMLExport.HTMLDocumentBody: TStrings, TfrxHTMLExport.HTMLDocumentEnd: TStrings + improved RTF export (with line spacing, vertical gap etc) + added support of Enhanced Metafile (EMF) images in Rich Text (RTF), Open Office (ODS), Excel (XLS) exports + added OnAfterScriptCompile event + added onLoadRecentFile Event + added C++ Builder demos + added hot-key Ctrl + mouseWheel - Change scale in designer + added TfrxMemoView.AnsiText property - fixed bug in RTF export with EMF pictures in OpenOffice Writer - fixed some multi-thread isuues in engine, PDF, ODF exports - [enterprise] fixed integrated template of report navigator - [enterprise] fixed bug with export in Internet Explorer browser - fixed bug with font size of dot-matix reports in Excel and XML exports - fixed bug in e-mail export with many addresses - fixed bug in XLS export (with fast export unchecked and image object is null) - [enterprise] fixed bug in TfrxReportServer.OnGetVariables event - fixed bug in Calcl function - fixed memory leak in Cross editor - fixed progress bar and find dialog bug in DualView - fixed bug in PostNET and ean13 barcodes - fixed bug with TruncOutboundText in Dot Matrix report - fixed bugs with break points in syntaxis memo - improved BeforeConnect event in ADO - fixed bug in inhehited report with internal dataset - fixed bug in TfrxPanelControl with background color(Delphi 2005 and above) version 4.6 --------------- + added & , < , > to XML reader + added <nowrap> tag, the text concluded in tag is not broken by WordWrap, it move entirely + added ability to move band without objects (Alt + Move) + added ability to output pages in the preview from right to left ("many pages" mode), for RTL languages(PreviewOptions.RTLPreview) + added ability to storing picture cache in "temp" file (PreviewOptions.PictureCacheInFile) + added EngineOptions.UseGlobalDataSetList (added for multi-thread applications) - set it to False if you don't want use Global DataSet list(use Report.EnabledDataSet.Add() to add dataset in local list) + added new property Hint for all printed objects, hints at the dialog objects now shows in StatusBar + added new property TfrxDBLookupComboBox.AutoOpenDataSet (automatically opens the attached dataset after onActivate event) + added new property TfrxReportPage.PageCount like TfrxDataBand.RowCount + added new property WordWrap for dialog buttons (Delphi 7 and above). + added sort by name to data tree + added TfrxDesigner.TemplatesExt property + added TfrxStyles class in script rtti + changes in the Chart editor: ability to change the name of the series, ability to move created series, other small changes + [enterprise] added configurations values refresh in run-time + [enterprise] added new demo \Demos\ClientServer\ISAPI + [enterprise] added output to server printers from user browser (see config.xml "AllowPrint", set to "no" by default), note: experimental feature + [enterprise] added reports list refresh in run-time + [enterprise] added templates feature + [enterprise] improved speed and stability + [fs] added TfsScript.IncludePath property + [fs] added TfsScript.UseClassLateBinding property + [fs] fixed type casting from variant(string) to integer/float - changes in report inherit: FR get relative path from current loaded report(old reports based on application path works too) - corrected module for converting reports from Report Builder - fixed bug in CrossTab when set charset different from DEFAULT_CHARSET - fixed bug in RTF export with some TfrxRichView objects - fixed bug when print on landscape orientation with custom paper size - fixed bug when use network path for parent report - fixed bug with Band.Allowslit = True and ColumnFooter - fixed bug with drawing subreport on stretched band - fixed bug with embedded fonts in PDF export - fixed bug with long ReportTitle + Header + MaterData.KeepHeader = true - fixed bug with minimizing of Modal designer in BDS2005 and above - fixed bug with paths in HTML export - fixed bug with RTL in PDF export - fixed bug with SubReport in multi column page - fixed bug with Subreport.PrintOnParent = true in inherited report - fixed bug with SYMBOL_CHARSET in PDF export - fixed bug with the addition of datasets by inheritance report - fixed bug with width calculation when use HTML tags in memo - fixed compatibility with WideStrings module in BDS2006/2007 - fixed flicking in preview when use OnClickObject event - fixed free space calculation when use PrintOnPreviousPage - fixed preview bug with winXP themes and in last update - fixed subreports inherit - Thumbnail and Outline shows at right side for RTL languages - [fs] fixed bug with late binding version 4.5 --------------- + added ConverterRB2FR.pas unit for converting reports from Report Builder to Fast Report + added ConverterQR2FR.pas unit for converting reports from QuickReport to FastReport + added support of multiple attachments in e-mail export (html with images as example) + added support of unicode (UTF-8) in e-mail export + added ability to change templates path in designer + added OnReportPrint script event + added PNG support in all version (start from Basic) + added TfrxDMPMemoView.TruncOutboundText property - truncate outbound text in matrix report when WordWrap=false + added new frames styles fsAltDot and fsSquare + added new event OnPreviewDblClick in all TfrxView components + added ability to call dialogs event after report run when set DestroyForms = false + added ability to change AllowExpressions and HideZeros properties in cross Cells (default=false) + added IgnoreDupParams property to DB components + added auto open dataset in TfrxDBLookupComboBox + added new property TfrxADOQuery.LockType + added define DB_CAT (frx.inc) for grouping DB components + added TfrxPictureView.HightQuality property(draw picture in preview with hight quality, but slow down drawing procedure) + [FRViewer] added comandline options "/print filename" and "/silent_print filename" + added unicode input support in RichEditor + added new define HOOK_WNDPROC_FOR_UNICODE (frx.inc) - set hook on GetMessage function for unicode input support in D4-D7/BCB4-BCB6 + added ability chose path to FIB packages in "Recompile Wizard" + added new function TfrxPreview.GetTopPosition, return a position on current preview page + added new hot-keys to Code Editor - Ctrl+Del delete the word before cursor, Ctrl+BackSpace delete the word after cursor(as in Delhi IDE) + added "MDI Designer" example - all language resources moved to UTF8, XML - fixed bug with html tags [sup] and [sub] - fixed width calculation in TfrxMemoView when use HTML tags - fixed bug with suppressRepeated in Vertical bands - fixed bug when designer not restore scrollbars position after undo/redo - fixed visual bug in toolbars when use Windows Vista + XPManifest + Delphi 2006 - fixed bug in CalcHeight when use negative LineSpace - fixed bug in frx2xto30 when import query/table components, added import for TfrDBLookupControl component - fixed bug with Cross and TfrxHeader.ReprintOnNewPage = true - fixed converting from unicode in TfrxMemoView when use non default charset - [fs] fixed bug with "in" operator - fixed bug with aggregate function SUM - fixed bug when use unicode string with [TotalPages#] in TfrxMemoView - fixed bug with TSQLTimeStampField field type - fixed designer dock-panels("Object Inspector", "Report Tree", "Data Tree") when use designer as MDI or use several non-modal designer windows - fixed bug with hide/show dock-panels("Object Inspector", "Report Tree", "Data Tree"), now it restore size after hiding - fixed bug in XML/XLS export - wrong encode numbers in memo after CR/LF - fiexd bug in RTF export - fixed bug with undo/redo commands in previewPages designer - fixed bug with SuppressRepeated when use KeepTogether in group - fixed bug with SuppressRepeated on new page all events fired twice(use Engine.SecondScriptcall to determinate it) version 4.4 --------------- + added support for CodeGear RAD Studio 2007 + improved speed of PDF, HTML, RTF, XML, ODS, ODT exports + added TfrxReportPage.BackPictureVisible, BackPicturePrintable properties + added rtti for the TfrxCrossView.CellFunctions property + added properties TfrxPDFExport.Keywords, TfrxPDFExport.Producer, TfrxPDFExport.HideToolbar, TfrxPDFExport.HideMenubar, TfrxPDFExport.HideWindowUI, TfrxPDFExport.FitWindow, TfrxPDFExport.CenterWindow, TfrxPDFExport.PrintScaling + added ability recompile frxFIB packages in "recompile wizard" + added ability to set color property for all teechart series which support it + added, setting frame style for each frame line in style editor + added TfrxPreview.Locked property and TfrxPreview.DblClick event + added 'invalid password' exception when load report without crypt + added new parameter to InheritFromTemplate (by default = imDefault) imDefault - show Error dialog, imDelete - delete duplicates, imRename - rename duplicates + added property TfrxRTFExport.AutoSize (default is "False") for set vertical autosize in table cells * redesigned dialog window of PDF export * improved WYSIWYG in PDF export - fixed bug, the PageFooter band overlap the ReportSummary band when use EndlessHeight - fixed bug with lage paper height in preview - fixed bug with outline and encryption in PDF export - fixed bug with solid arrows in PDF export - fixed bug when print TfrxHeader on a new page if ReprintOnNewPage = true and KeepFooter = True - fixed bug when used AllowSplit and TfrxGroupHeader.KeepTogether - fixed page numbers when print dotMatrix report without dialog - fixed bug with EndlessHeight in multi-columns report - fixed font dialog in rich editor - [fs] fixed bug when create TWideStrings in script code - fixed bug with dialog form when set TfrxButtonControl.Default property to True - fixed twice duplicate name error in PreviewPages designer when copy - past object - fixed bug with Preview.Clear and ZmWholePage mode - fixed bug with using "outline" together "embedded fonts" options in PDF export - fixed multi-thread bug in PDF export - fixed bug with solid fill of transparent rectangle shape in PDF export - fixed bug with export OEM_CODEPAGE in RTF, Excel exports - fixed bug with vertical size of single page in RTF export - fixed bug with vertical arrows in PDF export - fixed memory leak with inherited reports version 4.3 --------------- + added support for C++Builder 2007 + added encryption in PDF export + added TeeChart Pro 8 support + added support of OEM code page in PDF export + added TfrxReport.CaseSensitiveExpressions property + added "OverwritePrompt" property in all export components + improved RTF export (WYSIWYG) + added support of thai and vietnamese charsets in PDF export + added support of arrows in PDF export * at inheritance of the report the script from the report of an ancestor is added to the current report (as comments) * some changes in PDF export core - fixed bug with number formats in Open Document Spreadsheet export - fixed bug when input text in number property(Object Inspector) and close Designer(without apply changes) - fixed bug in TfrxDBDataset with reCurrent - fixed bug with memory leak in export of empty outline in PDF format - line# fix (bug with subreports) - fixed bug with edit prepared report with rich object - fixed bug with shadows in PDF export - fixed bug with arrows in designer - fixed bug with margins in HTML, RTF, XLS, XML exports - fixed bug with arrows in exports - fixed bug with printers enumeration in designer (list index of bound) - fixed papersize bug in inherited reports version 4.2 --------------- + added support for CodeGear Delphi 2007 + added export of html tags in RTF format + improved split of the rich object + improved split of the memo object + added TfrxReportPage.ResetPageNumbers property + added support of underlines property in PDF export * export of the memos formatted as fkNumeric to float in ODS export - fixed bug keeptogether with aggregates - fixed bug with double-line draw in RTF export - fix multi-thread problem in PDF export - fixed bug with the shading of the paragraph in RTF export when external rich-text was inserted - fixed bug with unicode in xml/xls export - fixed bug in the crop of page in BMP, TIFF, Jpeg, Gif - "scale" printmode fixed - group & userdataset bugfix - fixed cross-tab pagination error - fixed bug with round brackets in PDF export - fixed bug with gray to black colors in RTF export - fixed outline with page.endlessheight - fixed SuppressRepeated & new page - fixed bug with long time export in text format - fixed bug with page range and outline in PDF export - fixed undo in code window - fixed error when call DesignReport twice - fixed unicode in the cross object - fixed designreportinpanel with dialog forms - fixed paste of DMPCommand object - fixed bug with the export of null images - fixed code completion bug - fixed column footer & report summary problem version 4.1 --------------- + added ability to show designer inside panel (TfrxReport.DesignReportInPanel method). See new demo Demos\EmbedDesigner + added TeeChart7 Std support + [server] added "User" parameter in TfrxReportServer.OnGetReport, TfrxReportServer.OnGetVariables and TfrxReportServer.OnAfterBuildReport events + added Cross.KeepTogether property + added TfrxReport.PreviewOptions.PagesInCache property - barcode fix (export w/o preview bug) - fixed bug in preview (AV with zoommode = zmWholePage) - fixed bug with outline + drilldown - fixed datasets in inherited report - [install] fixed bug with library path set up in BDS/Turbo C++ Builder installation - fixed pagefooter position if page.EndlessWidth is true - fixed shift bug - fixed design-time inheritance (folder issues) - fixed chm help file path - fixed embedded fonts in PDF - fixed preview buttons - fixed bug with syntax highlight - fixed bug with print scale mode - fixed bug with control.Hint - fixed edit preview page - fixed memory leak in cross-tab version 4.0 initial release --------------------- Report Designer: - new XP-style interface - the "Data" tab with all report datasets - ability to draw diagrams in the "Data" tab - code completion (Ctrl+Space) - breakpoints - watches - report templates - local guidelines (appears when you move or resize an object) - ability to work in non-modal mode, mdi child mode Report Preview: - thumbnails Print: - split a big page to several small pages - print several small pages on one big - print a page on a specified sheet (with scale) - duplex handling from print dialogue - print copy name on each printed copy (for example, "First copy", "Second copy") Report Core: - "endless page" mode - images handling, increased speed - the "Reset page numbers" mode for groups - reports crypting (Rijndael algorithm) - report inheritance (both file-based and dfm-based) - drill-down groups - frxGlobalVariables object - "cross-tab" object enhancements: - improved cells appearance - cross elements visible in the designer - fill corner (ShowCorner property) - side-by-side crosstabs (NextCross property) - join cells with the same value (JoinEqualCells property) - join the same string values in a cell (AllowDuplicates property) - ability to put an external object inside cross-tab - AddWidth, AddHeight properties to increase width&height of the cell - AutoSize property, ability to resize cells manually - line object can have arrows - added TfrxPictureView.FileLink property (can contain variable or a file name) - separate settings for each frame line (properties Frame.LeftLine, TopLine, RightLine, BottomLine can be set in the object inspector) - PNG images support (uncomment {$DEFINE PNG} in the frx.inc file) - Open Document Format for Office Applications (OASIS) exports, spreadsheet (ods) and text (odt) Enterprise components: - Users/Groups security support (see a demo application Demos\ClientServer\UserManager) - Templates support - Dynamically refresh of configuration, users/groups D2010以上版本(D14_D19)安装必读 delphi2010以上版本(D14_D19)使用者安装时,请将res\frccD14_D19.exe更名名为frcc.exe frccD14_D19.exe是专门的delphi2010以上版本(D14_D19)编码器。其他低delphi版本,请使用frcc.exe
RX Library 2.75 with Delphi 2009 support (by FlexGraphics software) ====================================================================== The Set of Native Delphi Components for Borland Delphi versions 1, 2, 3, 4, 5, 6, 7, 2005, 2006, 2009 and Borland C++ Builder 1, 3, 4, 5, 6, 2006 & 2009. 100% Source Code. Last revision date Oct 12, 1999. PLEASE FOLLOW THE INSTRUCTIONS PROVIDED IN THE INSTALLATION SECTION! TABLE OF CONTENTS ----------------- Latest Changes Overview History License Agreement Installation Demonstration Programs Source Files Using GIF Images Copyright Notes NEW FOR VERSION 2.75 -------------------- Delphi 5.0 & C++Builder 4.0 Compatibility New components: TRxLoginDialog New properties, events: TFormPlacement.RegistryRoot TFormPlacement.Version TFontComboBox.UseFonts TRxDBGrid.OnTopLeftChanged TRxDBLookupCombo.DisplayValues TStrHolder.Macros, TStrHolder.OnExpandMacros RxSpin.TValueType.vtHex New routines, methods, constants: SaveClipboardToStream, LoadClipboardFromStream (clipmon.pas) AppFileName, AppVerInfo (rxverinf.pas) XorString, XorEncode, XorDecode (strutils.pas) BUG FIXES. Overview -------- This version is the result of long unactivity of RX Library authors and some imperfections and bugs of other RX adaptations to Delphi 6. The authors of this version disclaim all warranties as to this software, whether express or implied, including without limitation any implied warranties of merchantability or fitness for a particular purpose. Use under your own responsibility, but comments (even critique) in English (or in Russian) are welcome. RX Library contains a large number of components, objects and routines for Borland Delphi with full source code. This library is compatible with Borland Delphi 1, 2, 3, 4, 5, 6 and Borland C++ Builder 1, 3, 4. This collection includes over 60 native Delphi components. RX Library is a freeware product. Feel free to distribute the library as long as all files are unmodified and kept together. The authors disclaim all warranties as to this software, whether express or implied, including without limitation any implied warranties of merchantability or fitness for a particular purpose. Use under your own responsibility, but comments (even critique) in English (or in Russian) are welcome. 1. Components: TRxDBLookupCombo provides an incremental search through lookup list by directly typing into the combo control while the lookup list is displayed, LookupSource can refer to TTable, TQuery, TRxQuery or TQBEQuery. It even incrementally searches on the query results and much more... TRxDBLookupList is the same as TRxDBLookupCombo (in functionality). TRxDBComboBox is a TDBComboBox descendant allowing to have different values displayed from that stored in database without using a lookup table. Allows you to display understandable text versions of stored codes in your table. TRxDBGrid provides you with the ability to change the background color and font displayed within individual cells and entire rows and columns; save and restore columns order and display width in ini-files and system registry; display icons for BLOB, memo, OLE and picture fields; select multiple records; convert columns headings to buttons. TDBStatusLabel displays the DataSet state (for all datasets) or current record number (for DBase or Paradox tables). TDateEdit and TDBDateEdit (data-aware version) allows direct typing and has a button to bring up calendar in popup window (combo-box alike) or in a dialog. TQBEQuery enables Delphi applications to use Paradox-style Query-by-example (QBE) statements to query tables, and perform insert and update queries. TRxQuery is a TQuery descendant. It supports macros in the SQL text, which are similar to Params. Macros allow to change query text easily and handy. TSQLScript allows multiple SQL statements in one query. TRxDBFilter encapsulates BDE ability to filter records locally. The component provides event on filtering and/or conditions in StringList property. TDBProgress displays BDE operations progress for IDAPI drivers that support callback-functions. TDBIndexCombo is a visual interface component that provides your end- users with an easy means of changing the current display order of data being retrieved from an indexed table. When the user selects the TDBIndexCombo component, it's drop-down selection list is populated with the DisplayNames of all indexes available for the table it's assigned to. TBDEItems, TDatabaseItems, TTableItems are lists populated by the corresponding BDE information (database list, table list, field list etc). TDBSecurity provides most common dialogs for database applications: Login Dialog and Change Password Dialog. TRxRichEdit is a wrapper for a Windows rich text 2.0 & 3.0 edit control with OLE objects support (Delphi 2.0 or higher). TRxDBRichEdit - permits the user to display and enter Rich Text Format (RTF) data in a memo or BLOB field (only for Delphi 2.0 or higher). TAnimatedImage - animation "bitmap by bitmap". Design-time editor allows you to load Windows animation cursors (ani-files) into this component. TClipboardViewer is a visual control that displays the contents of Clipboard using different formats. TCurrencyEdit - input of money amounts, and other numbers too. TRxCalcEdit and TRxDBCalcEdit (data-aware version) take the display and editing of numeric data one step further: they provide a popup calculator to help you calculate the number. TPicClip represents a bitmap as the logical array of bitmaps and supports access by index. TFormPlacement allows to save and restore form size, position and window state in/from ini-file or Registry. TFormStorage allows you to read and write virtually any component published property to an INI file or the system Registry with virtually no code. Works with 3rd party and your own custom controls as well. Don't be stuck with dozens of INI-Aware components, use TFormStorage and let it manage all that for you. TPageManager is useful when creating multipage dialogs such as "Wizards" (or "Experts"). TColorComboBox is a combo box to pick up color. TFontComboBox is a combo box to pick up font name. TRxLabel is a customizable shadowed label. TTextListBox is TListBox successor with automatic horizontal scrollbar if necessary. TRxSplitter separates two controls to allow to change their sizes at run-time. Never again create a splitter by hand using panel components. Add splitter support to any application by using the RxSplitter component. TRxSlider and TRxSwitch are slider and switch controls respectively with the ability to change their looks. TRxSlider provides more features than the Win32 common control, such as custom thumbs. TRxSpinEdit and TRxSpinButton are spin controls variants. TSpeedBar with horizontal or vertical orientation that can be placed at the top, bottom, left, right of the form. Customizable in designer and at run-time using drag & drop operation, similar to Delphi speedbar. Allow you use flat and transparent buttons such as standard-style buttons. Button's transparent ability lets graphics show through from under the speedbar. TComboEdit, TRxDBComboEdit (data-aware version), TFilenameEdit, TDirectoryEdit are the edit boxes with buttons. User can type data into an edit box or can bring up dialog or popup window by clicking a button. TMemoryTable implements BDE in-memory table as a dataset component (with Delete operation). TRxMemoryData is a in-memory dataset that mimics the behaviors of a regular Delphi dataset. Unlike TMemoryTable component, TRxMemoryData is BDE independent. This means it can still be used by any application that replace the BDE with some other 3rd party database engines (only for Delphi 3.0 or higher). TRxCheckListBox is a list box with built-in check boxes. TRxSpeedButton provides you more features than the standard TSpeedButton component, such as Transparent, Flat, AllowTimer and GrayedInactive properties and Drop-Down Menu. TRxTimerList component provides all the functions of the standard TTimer component, plus the additional benefit of using only one Windows timer for up to 32767 timing events. You can customize this component in designer using easy-to-use component editor. TAppEvents is an Application wrapper component, which makes it easier to work with the TApplication object properties and events at design time. TRxFolderMonitor component provides notification if any changes matching the filter conditions occur in the specified directory or subtree. TRxTrayIcon component enables 32-bit applications to add static and animated icons to the Windows system tray. TRxClock, TSecretPanel, TRxDice, TRxCalculator, TStrHolder, TMRUManager, TRxWindowHook, TRxGradientCaption, TRxLoginDialog, TRxMemoryData, owner-draw menus and much more. 2. The editors of standard properties with some advanced features. TPicture and TGraphic editor adds Copy and Paste Buttons, supports Icons in Clipboard, favorites directories, uses open dialog box with preview. Hint property editor enables multi-line hint entry. Project Resource Expert for Delphi 3.0 or higher and C++Builder 3.0 or higher allows you to manage your project resource file. This expert can be found as "View | Project Resources" in the Delphi 3 and C++Builder 3 IDE menu and as "Project | Resources" in the Delphi 4 or higher IDE menu. 3. Units that provide functions and objects to work with databases, images, strings, dates, files, INI-files. 4. RX Library help files in Russian only. Help files in other languages do not exist. 5. A couple of simple demo applications. History ------- RX 2.75 (Oct,12,1999). Delphi 5.0 & C++Builder 4.0 compatibility. Bug fixes for RX 2.60. RX 2.60 (Jan,27,1999). New components TRxMemoryData, TRxRichEdit. Bug fixes for RX 2.50. RX 2.50 (Jul,22,1998). New components: TRxFolderMonitor, TRxLookupEdit, TRxGradientCaption, TRxMainMenu, TRxPopupMenu. Delphi 4.0 and C++Builder 3.0 compatibility. Bug fixes. RX 2.40 (Feb,11,1998). New components: TRxDBComboEdit, TRxCalcEdit, TRxDBCalcEdit. GIF Image support (including new component TRxGIFAnimator and new demo program). Project Resource Expert for Delphi 3. Bug fixes. RX 2.32 (Jul,30,1997). Bug fixes. Full compatibility with all Delphi versions (including Delphi 3 Professional and Developer editions) and Borland C++ Builder 1.0. C++ Builder demo. RX 2.31 (May,08,1997). Delphi 3.0 C/S release (build 5.53) compatibility. Bug fixes. RX 2.30 (Apr,22,1997). New components: TMRUList, TRxTimerList, TRxWindowHook. Delphi 3 (confidential beta pre-release, build 3.0.4.78) compatibility. Bug fixes. RX 2.01 (Feb,12,1997), 2.02 (Mar,10,1997). Bug fixes. New component TRxDBRichEdit. Version 2.02 became available for download on Internet. RX 2.00 (Nov,24,1996). New components: TMemoryTable, TRxCheckListBox, TRxDBComboBox, TStrHolder, TAppEvents. Bug fixes. RX 1.32 (Nov,11,1996). Delphi 2.0 compatible version. New components: TSQLScript, TPageManager, TRxTrayIcon. RX 1.03 (Jan,14,1996). Compiled DCU-files removed from installation package. New components: TFormStorage, TDBSecurity, TRxQuery, TSpeedbar, TRxSpinButton, TRxSpinEdit, TRxCalculator. RX 1.02 (Dec,27,1995). Private version. RX 1.01 (Dec,04,1995). Bug fixes, new component TRxDBFilter. RX 1.00 (Nov 1995). Initial release for Delphi 1.0 available in russian Fido. ExtVCL component collections from Apr,25,1995 and Jul,20,1995. License Agreement ----------------- Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies and that both the above copyright notice and this permission notice appear in supporting documentation, and that the name of RX Library authors not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. This software is made available "as is", and RX LIBRARY AUTHORS DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD TO THIS SOFTWARE, INCLUDING WITHOUT LIMITATION ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND IN NO EVENT SHALL AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. You can find full text of RX Library Software License agreement in the file LICENSE.TXT. Installation ------------ Before installing RX Library components into Delphi, check out RX.INC file located in RX\UNITS subdirectory. This file is included in all RX Library units and contains conditional defines that affects compilation. You can change some of these defines or specify global compiler options there. 1. Delphi 2006: Uninstall previous installed version of RX Library from Delphi 2006 IDE. Remove previously compiled RX packages (if any) rxctl2006.BPL, rxdb2006.BPL, rxbde2006.BPL, dclrx2006.BPL, dclrxdb2006.BPL and dclrxbd2006.BPL from your hard disk. Use "Tools\Options" menu item of Delphi IDE to add RxLib "Units" path. Select "Environment Options\Delphi Options\Library - Win32" page in dialog and add path to RxLib "Units" directory in "Library path" edit control. Use "File\Open..." menu item of Delphi IDE to open RX project group "...\Units\Delphi 2006\rxlib.bdsproj". Select "Project\Build All projects" menu item. In the Project Manager ("View\Project Manager" menu item) select "dclrx2006.bpl" project (by double clicking on it) and then in context menu (by right mouse click on item) select "Install". Repeat that for other RX Library design-time packages dclrxdb2006.DPK and dclrxbd2006.DPK. NOTE: do not save package sources in the Delphi IDE. 2. C++Builder 2006: Uninstall previous installed version of RX Library from Delphi 2006 IDE. Remove previously compiled RX packages (if any) rxctlC2006.BPL, rxdbC2006.BPL, dclrxC2006.BPL and dclrxdbC2006.BPL from your hard disk. Use "Tools\Options" menu item of Delphi IDE to add RxLib "Units" path. Select "Environment Options\C++ Options\Path and Directories" page in dialog and add path to RxLib "Units" directory in "Search Path" edit control. Use "File\Open..." menu item of Delphi IDE to open RX project group "...\Units\CBuilder 2006\rxlib.bdsproj". Select "Project\Build All projects" menu item. Put compiled BPL files into directory that is accessible through the search PATH (i.e. DOS "PATH" environment variable; for example, in the Windows\System directory). In the Project Manager ("View\Project Manager" menu item) select "dclrxC2006.bpl" project (by double clicking on it) and then in context menu (by right mouse click on item) select "Install". Repeat that for other RX Library design-time package dclrxdbC2006.DPK. NOTE: do not save package sources in the Delphi IDE. 3. Delphi 2005: Uninstall previous installed version of RX Library from Delphi 2005 IDE. Remove previously compiled RX packages (if any) rxctl9.BPL, rxdb9.BPL, rxbde9.BPL, dclrx9.BPL, dclrxdb9.BPL and dclrxbd9.BPL from your hard disk. Use "Tools\Options" menu item of Delphi IDE to add RxLib "Units" path. Select "Environment options\Delphi options\Library - Win32" page in "Options" dialog and add path to RxLib "Units" directory in "Library path" edit control. Use "File\Open..." menu item of Delphi IDE to open RX project group "...\Units\Delphi 2005\rxlib.bdsproj". Select "Project\Build All projects" menu item. In the Project Manager ("View\Project Manager" menu item) select "dclrx9.bpl" project (by double clicking on it) and then in context menu (by right mouse click on item) select "Install". Repeat that for other RX Library design-time packages dclrxdb9.DPK and dclrxbd9.DPK. NOTE: do not save package sources in the Delphi IDE. 4. Delphi 7.x: Uninstall previous installed version of RX Library from Delphi 7 IDE. Remove previously compiled RX packages (if any) RXCTL7.BPL, RXDB7.BPL, RXBDE7.BPL, DCLRX7.BPL, DCLRXDB7.BPL and DCLRXBD7.BPL from your hard disk. If you have Delphi 6 Professional or Personal Edition, deactivate the conditional define {$DEFINE DCS} in the RX.INC file before compiling the library. Use "File\Open..." menu item of Delphi IDE to open RX' runtime package RXCTL7.DPK. In "Package..." window click "Compile" button to compile packages RXCTL7.DPK. After compiling repeat that for other RX Library run-time packages RXDB7.DPK, RXBDE7.DPK. Put compiled BPL files into directory that is accessible through the search PATH (i.e. DOS "PATH" environment variable; for example, in the Windows\System directory). After compiling RX run-time packages you must install RX design-time packages into the IDE. Use "File\Open..." menu item to open RX design-time package DCLRX7.DPK. In "Package..." window click "Compile" button to compile the package and then click "Install" button to register RX Library components on the component palette. Repeat that for other RX Library design-time packages DCLRXDB7.DPK and DCLRXBD7.DPK. NOTE: do not save package sources in the Delphi IDE. 5. Delphi 6.x: Uninstall previous installed version of RX Library from Delphi 6 IDE. Remove previously compiled RX packages (if any) RXCTL6.BPL, RXDB6.BPL, RXBDE6.BPL, DCLRX6.BPL, DCLRXDB6.BPL and DCLRXBD6.BPL from your hard disk. If you have Delphi 6 Professional or Personal Edition, deactivate the conditional define {$DEFINE DCS} in the RX.INC file before compiling the library. Use "File\Open..." menu item of Delphi IDE to open RX' runtime package RXCTL6.DPK. In "Package..." window click "Compile" button to compile packages RXCTL6.DPK. After compiling repeat that for other RX Library run-time packages RXDB6.DPK, RXBDE6.DPK. Put compiled BPL files into directory that is accessible through the search PATH (i.e. DOS "PATH" environment variable; for example, in the Windows\System directory). After compiling RX run-time packages you must install RX design-time packages into the IDE. Use "File\Open..." menu item to open RX design-time package DCLRX6.DPK. In "Package..." window click "Compile" button to compile the package and then click "Install" button to register RX Library components on the component palette. Repeat that for other RX Library design-time packages DCLRXDB6.DPK and DCLRXBD6.DPK. NOTE: do not save package sources in the Delphi IDE. 6. Delphi 5.x: Uninstall previous installed version of RX Library from Delphi 5 IDE. Remove previously compiled RX packages (if any) RXCTL5.BPL, RXDB5.BPL, RXBDE5.BPL, DCLRX5.BPL, DCLRXDB5.BPL and DCLRXBD5.BPL from your hard disk. If you have Delphi 5 Professional or Standard Edition, deactivate the conditional define {$DEFINE DCS} in the RX.INC file before compiling the library. Use "File\Open..." menu item of Delphi IDE to open RX' runtime package RXCTL5.DPK. In "Package..." window click "Compile" button to compile packages RXCTL5.DPK. After compiling repeat that for other RX Library run-time packages RXDB5.DPK, RXBDE5.DPK. Put compiled BPL files into directory that is accessible through the search PATH (i.e. DOS "PATH" environment variable; for example, in the Windows\System directory). After compiling RX run-time packages you must install RX design-time packages into the IDE. Use "File\Open..." menu item to open RX design-time package DCLRX5.DPK. In "Package..." window click "Compile" button to compile the package and then click "Install" button to register RX Library components on the component palette. Repeat that for other RX Library design-time packages DCLRXDB5.DPK and DCLRXBD5.DPK. NOTE: do not save package sources in the Delphi IDE. 7. Delphi 4.x: Uninstall previous installed version of RX Library from Delphi 4 IDE. Remove previously compiled RX packages (if any) RXCTL4.BPL, RXDB4.BPL, DCLRX4.BPL and DCLRXDB4.BPL from your hard disk. If you have Delphi 4 Professional or Standard Edition, deactivate the conditional define {$DEFINE DCS} in the RX.INC file before compiling the library. Use "File\Open..." menu item of Delphi IDE to open RX' runtime package RXCTL4.DPK. In "Package..." window click "Compile" button to compile packages RXCTL4.DPK. After compiling repeat that for other RX Library run-time package RXDB4.DPK. Put compiled BPL files into directory that is accessible through the search PATH (i.e. DOS "PATH" environment variable; for example, in the Windows\System directory). After compiling RX run-time packages you must install RX design-time packages into the IDE. Use "File\Open..." menu item to open consistently RX design-time packages DCLRX4.DPK (MUST be first) and DCLRXDB4.DPK. In "Package..." window click "Compile" button to compile the package and then click "Install" button to register RX Library components on the "RX Controls", "RX DBAware" and "RX Tools" pages. NOTE: do not save package sources in the Delphi IDE. 8. C++Builder 4.x: Uninstall previous installed version of RX Library from C++Builder IDE. Remove previously compiled RX packages (if any) RXCTL4.BPL, RXDB4.BPL, DCLRX4.BPL and DCLRXDB4.BPL from your hard disk. Be sure that linker option "Use dynamic RTL" is unchecked. Use "File\Open..." menu item of C++Builder IDE to open RX' runtime package RXCTL4.BPK. Then use "Project\Make..." or "Project\Build..." menu item to compile package RXCTL4.BPK. After compiling repeat that consistently for each of the other RX Library packages (.BPK files) RXDB4.BPK, DCLRX4.BPK and DCLRXDB4.BPK (be sure to keep the sequence mentioned). For runtime packages (RXCTL4 and RXDB4) put compiled BPL files into directory that is accessible through the search PATH (DOS envirounment variable, not IDE search path; for example, in the Windows\System directory). After compiling RX packages you must install RX design-time packages into the C++Builder IDE. Use "Component\Install packages..." menu item to open "Packages" dialog box. Then click "Add..." button and locate DCLRX4.BPL from the RX\UNITS directory and click "OK" to install package into IDE. After installing DCLRX4 package install DCLRXDB4.BPL package as above. NOTE: do not save package sources in the C++Builder IDE. 9. Delphi 3.x: Uninstall previous installed version of RX Library from Delphi 3 IDE. Remove previously compiled RX packages RXCTL.DPL, RXDB.DPL, RXTOOLS.DPL, DCLRXCTL.DPL, DCLRXDB.DPL and DCLRXTLS.DPL from your hard disk. Use "File\Open..." menu item of Delphi IDE to open consistently RX run-time packages RXCTL.DPK (MUST be first), RXDB.DPK and RXTOOLS.DPK. In "Package..." window click "Compile" button to compile RX Library run-time packages. Put compiled DPL files into directory that is accessible through the search PATH (i.e. DOS "PATH" environment variable; for example, in the Windows\System directory). After compiling RX run-time packages you must install RX design-time packages into the IDE. Use "File\Open..." menu item to open consistently RX design-time packages DCLRXCTL.DPK (MUST be first), DCLRXDB.DPK and DCLRXTLS.DPK. In "Package..." window click "Install" button to register RX Library components on the "RX Controls", "RX DBAware" and "RX Tools" pages accordingly. NOTE: do not save package sources in the Delphi IDE. 10. C++Builder 3.x: Uninstall previous installed version of RX Library from C++Builder IDE. Remove previously compiled RX packages (if any) RXCTL.BPL, RXDB.BPL, DCLRXCTL.BPL and DCLRXDB.BPL from your hard disk. Be sure that linker option "Use dynamic RTL" is unchecked. Use "File\Open..." menu item of C++Builder IDE to open RX' runtime package RXCTL.BPK. Then use "Project\Make..." or "Project\Build..." menu item to compile package RXCTL.BPK. After compiling repeat that consistently for each of the other RX Library packages (.BPK files) RXDB.BPK, DCLRXCTL.BPK and DCLRXDB.BPK (be sure to keep the sequence mentioned). For runtime packages (RXCTL and RXDB) put compiled BPL files into directory that is accessible through the search PATH (DOS envirounment variable, not IDE search path; for example, in the Windows\System directory). After compiling RX packages you must install RX design-time packages into the C++Builder IDE. Use "Component\Install packages..." menu item to open "Packages" dialog box. Then click "Add..." button and locate DCLRXCTL.BPL from the RX\UNITS directory and click "OK" to install package into IDE. After installing DCLRXCTL package install DCLRXDB.BPL package as above. NOTE: do not save package sources in the C++Builder IDE. 11. Delphi 2.x and C++ Builder 1.0: Use the "Install..." item on Delphi's "Component" menu to add the RxCtlReg.PAS, RxDBReg.PAS and RxTooReg.PAS units to the component library. These units registers all RX Library components on the "RX Controls", "RX DBAware" and "RX Tools" pages accordingly. 12. Delphi 1.x: Use the "Install Components..." item on Delphi's Options menu to add the RxCtlReg.PAS, RxDBReg.PAS and RxTooReg.PAS units to the component library. These units registers all RX Library components on the "RX Controls", "RX DBAware" and "RX Tools" pages accordingly. 13. Help files: The help files (in Russian only) are distributed in separate installation packages for each version of Delphi and C++Builder. To install the help and keyword file into Delphi 1.0 and 2.0, follow these steps: Click on the HelpInst icon in the Delphi group in the Program Manager. Select File|Open from the menu. Change directories so you are in the \Delphi\Bin directory, and select the Delphi.hdx file. Click the OK button. Select Keywords|Add Keyword File from the menu. Change directories so you are in the directory where you stored the help files of the RX. Select the RX.KWF (in Delphi 1.0) or RX32.KWF (in Delphi 2.0) file, and click the OK button. Select File|Save from the menu. This will recompile the Delphi.hdx file. You can then close the Helpinst program. You will now be able to jump to the help file for the RX Library by selecting the appropriate property and hitting 'F1.' Help file now available is only in Russian. This help requires Arial Cyr and Courier New Cyr fonts (Windows code page 1251). C++ Builder Compatibility ------------------------- This version of RX Library is compatible with Borland C++ Builder 1.x, 3.x and 4.x. RX Library is not tested properly with any version of Borland C++ Builder. Use at your own risk. Demonstration Programs ---------------------- Demonstration programs included in RX Library use tables from DELPHI\DEMOS\DATA directory and BDE alias "DBDEMOS". Source Files ------------ All sources (100%) of RX Library are available in RX\UNITS directory. All language specific string constants used in RX Library are collected in resource files. There are sources for all string resource files in English and Russian. The rest resource files containing bitmap images and icons for component palette are also included as compiled resources (*.R16, *.R32) and as *.RC-files. Resource files sources are available in RX\RESOURCE directory. So, you can use any resource compiler (i.e. BRCC.EXE or BRCC32.EXE) to create *.RES (*.R16 & *.R32) and *.DCR (*.D16 & *.D32) files. Using GIF Images ---------------- To use GIF images in an your application at runtime, include the RXGIF unit in your unit's "uses" clause. If you are using another GIF image support library (like ImageLib), deactivate the conditional define USE_RX_GIF in RX\UNITS\RX.INC file and rebuild your component library. WARNING. You will need an LZW patent license from Unisys in order to provide end-user GIF support legally in any commercial or shareware application. It is provided as a development tool only. Copyright Notes --------------- Most of the modules in our library are written by us. We have to make a note of units based on sources of other authors. Unit RXLOOKUP is based on original Delphi VCL units DBLOOKUP, DBCTRLS. Unit STRUTILS is based on a unit of string-handling routines AGSLIB by Alexey Lukin. Unit DBEXCPT is based on a unit DBEXCEPT.PAS from Borland Delphi. Procedures to read and write GIF files, GIF-decoding and encoding based on freeware C source code of GBM package by Andy Key (nyangau@interalpha.co.uk). Some components in a unit DBLISTS are based on DELPHI\DEMOS\DB\TOOLS\BDETABLE unit from Delphi 1.0 Demos. Unit PICTEDIT contains advanced property editor based on unit PICEDIT.PAS from VCL, unit QBNDDLG is a modified unit QBINDDLG.PAS from VCL, unit IMAGPRVW.PAS is a modified unit IMAGEWIN.PAS from Borland Delphi 1.0 C/S Demos DELPHI\DEMOS\IMAGVIEW. RX Library Web Site: http://www.rxlib.com (not working now) Authors: Fedor Kozhevnikov (fkozh@iname.com) Igor Pavluk (igorp@mail.com) Serge Korolev (korolev@usa.net) Unit RxMemDS modifications: Claudio F. Zwitkovits (cfzwit@yahoo.com.ar) Compatibility with Delphi 6 - 2006 was added by: FlexGraphics software info@flex-graphics.com http://www.flex-graphics.com
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值