Change Log
Home | SourceForge Page |
Version History | FAQ |
Documentation | About Me
Version 1.15
- Converted the library to dynamically locate and load the needed Palm DLLs. This means that the DLLs no longer
need to be located on the system search path. Thanks to Frank Schmidberger for showing me how to it
- Fixed up some events that weren't being fired [Eric Cloninger]
- Added support for the Palm TimeType noTime constant
Version 1.14
- Added a Delphi 7 project file, and set an .inc file which defines common
constants, since both Delphi 6 and Delphi 7 share some alternate new units
[Daniel Szasz]
- Added an IFDEF in pfgDbSave.pas to handle Delphi 4 not having all the
TFieldType values that the later versions of Delphi 4 do [Jim & Leslie Thorne]
- Modified TpfgPalmSyncComponent.SetSetLocalAttribs - it was checking if
FGetLocalAttribs rather than FSetLocalAttribs was assigned [boanerges]
- Removed the pfgLocalDb.pas file from the distribution (it was deprecated for
some time)
Version 1.13
- **NOTE**: Renamed the Delphi 5 package to have an explicit 'D5' suffix - it was
causing confusion amongst some people
- Added some code to allow the creation of a Palm table image file
on the local computer from a DataSet component, allowing for creation of
database images outside of a HotSync session. Use the new overloaded version
of ExportDatabaseToFile.
- Since saving a record moves it to the end of the table, the record numbering
gets shifted up by one. So if you followed a t.Post call with t.Next, you
would end up getting not the next record, but the one after. The component
now flags when a record is saved, and if Next is called (with no active
category filtering), then the record number isn't incremented.
- Fixed up the reading of the Palm's username from TpfgPalmSystemInfo.Username
property - I didn't realise that the length field returned from
SyncReadUserId includes the terminator Null byte [chuah]
- Removed a very ancient exception handling block from the PostRecord method
that was using the Windows OutputDebugString, but also suppressing the
exception. Also removed OutputDebugString try block from the
LocalToRemoteRecord method
- Removed an old version of the EPalmSyncError exception class from the
pfgPalmMisc.pas, as well as the support method GetSyncErrorStr, and the
array of error strings
- Added the constants for SYNCERR_UNKNOWN and SYNCERR_READ_ONLY to the
pfgPalmSyncError.pas TranslatePalmError method
- Added a call to HsRefreshConduitInfo in a try/except block in both the
DllRegisterServer and DllUnRegisterServer methods. This means that in
HotSync API versions that support it, you won't need to restart HotSync
Manager to have the conduit appear/disappear from the conduit list after
registration/deregistration. The Palm documentation says that this method
is private, though, so I've wrapped it in a IFNDEF SAFE_CODE block - you can
define a global define SAFE_CODE to stop the calls being included in your
conduit, if you wish [Olrik Larsen]
- Added in the ability to delete any folders made by the conduit in any
user subdirectories. To do this, a RemoveDirTree method has been added to
pfgPalmMisc.pas, and an extra method RemoveConduitFolders has been added to
pfgPalmComp.pas. [all by Olrik Larsen]
- Added in two events to the Palm component object - OnRegisterConduit and
OnUnregisterConduit. The unregister event has a RemoveDirs parameter which
you can set to indicate whether to try and remove any subdirectories created
by the conduit. The default is True (to remove). Also added two public
methods, DoRegisterConduit and DoUnregisterConduit, to act as an interface
to them [Olrik Larsen]
- Added two extra buttons to the HotSync Action dialog, "Data Settings" and
"About", with associated properties for display, and action events.
[Olrik Larsen]
- Changed the THotSyncActionForm Action property to HSAction - it was clashing
with the TControl.Action propertys [Olrik Larsen]
- Removed the automatic installation of the TpfgPalmLocalTable component - it's
been deprecated for many releases, and still having it up on the Component
Palette will only cause confusion.
- Fixed a minor glitch where random bytes could be introduced into unused
space in a fixed length string field when writing out to a record. Now all
unused bytes will be zeroed
Version 1.12
Version 1.11
- Cleaned up some of the comments in the source files
- Fixed the GetFieldValue to return a floating point value for
ptSingle field types [Herval Freire]
- Modified the writing of records to the Palm to be able to handle
empty values in all the various field types. Previously, only the
integer field types were being handled
Version 1.10
- Added support for the Single and Int64 types. Can't support Doubles,
because the format between Palm and PC seems to be different
- Fixed a bug in aligment control after variable length strings with the
opStringsAlign option
- Fixed up some problems with the handling of the opStringsAlign option
- Fixed problems with the ptLong type. It now works as a 32-bit signed
integer type
- Added support for Delphi 6. Note that I don't personally have a copy
of Delphi 6, so the Delphi 6 support is tentative. Thanks go to jandjbull
for providing the Delphi 6 package files, and noting the changes needed
to support Delphi 6 (I added them in with version IFDEFS so the correct
versions are used depending on which version of Delphi you have)s
Version 1.9
- Fixed some spelling mistakes in the dialogs
- Updated the help documentation - the main index no longer says library
version 1.3 :)
- Updated the readme.txt. I moved the previous notes to the end of the document.
Hopefully, this will mean more people see the "Installation Instructions"
section before they start e-mailling me questions. :)
- Added the TpfgPalmPollingThread class, a thread class for keeping the
Palm connection active. Located in pfgPollingThread.pas
- Added a basic example for the synchronisation component [Per-Eric Larsson]
- One of the examples still used Delphi 5 textual forms. Resaved it to
use binary .dfm files
Version 1.8
- Modified the source to enable immediate compilation under Delphi 4,
and included a new Delphi 4 package [Dave Murray]
- Added an OnBefore/OnAfterTableCreate event to the table component
[Per-Eric Larsson]
- Some more tweaks to the synchronisation component - newly included
is versioning support to prevent different versions of a table
synchronising against each other [Per-Eric Larsson]
Version 1.7
- Finally got around to properly testing the TpfgRecordBuffer class; fixed
some bugs in it
- Some changes made to the synchronisation component [Per-Eric Larsson]
- Changed the temporary handle variable name used in the Exists method
to TempHandle. Using "FHandle" as the name was just asking for trouble.
Also modified it to immediately return true if the table is open - it
obviously exists in that case
- Fixed a glitch in the AsDateTime property of fields
- Fixed an incorrect reference in VarArrayHighBound from 0 to 1
- Fixed a glitch in the table destructor method when an active table was
freed - the internal objects were being freed before the table was closed
- Enhanced the integer functionality so that empty fields now correctly
store as zero rather than raising an error
- Improved support for null DateTime's - now a completely empty palm DateTime
field will be represented as TDateTime(0.0) and vice versa
- Fixed an indexing error when passing out custom fields as an array when
AsVariant is called on a field
- Adjusted the version field down to Word, which is the size of the version
field in CCreateDb. I'm not sure why I had it as LongWord to begin with
- Fixed a glitch in the Field.AsVariant routine - it will now return a
variant with the same (or nearest compatible) type as the field [before it
would only return as a string or a variant array of bytes for custom types]
- Enhanced field value accessors to correctly handle unassigned field values -
returning whatever empty/null value is appropriate
- Added a call to SyncYieldCycles in the SetProgress method - this allows the
entire progress dialog to refresh itself it you don't immediately follow
with a call to a HotSync API method
- Tweaked the Exists method so that it will generate a standard exception
if any error other than SYNCERR_NOT_FOUND is returned
- Added an OnReadField to the TpfgRecordBuffer class to allow loading of
arbitrary field/values
Version 1.6
- Added support for handling tables with a variable number of fields. Two new
events, OnReadField and OnWriteField, allow the user to control packing and
unpacking of record fields. Still keeping the StrictFields property, but it
is deprecated in favour of this new style.
- Added a PurgeTable method to the table to remove all deleted records from
the Palm table [Per-Eric Larsson]
- Added a new icon for the sync component [Per-Eric Larsson]
- Slightly reworked the conduit configuration code to make it part of the
Palm component; thus giving it access to the conduit's name when giving a
default dialog [Per-Eric Larsson]
Version 1.5
- Added a StrictFields property to FieldDefs. By turning it off, it makes it easier
to synchronise against tables with a variable number of fields of the same type
at the end (such as the Address book), by adding supurfulous field definitions of
that type
Version 1.4
- Bugfixes to the pfgPalmSyncComponent.pas file
- Changed the PTCHAR type from "^TCHAR" to "PChar" to improve type conversions when
calling functions
Version 1.3
MAJOR: Combined the three components TpfgConduitRegister, TpfgConduitConfigure,
and TpfgConduitExecute, into one overall component: TpfgPalmComponent. This
component contains all the properties and events of all three components.
Changed TpfgPalmRemoteTable Flags property to dbFlags, to reduce confusion
with the record Flags property in Fields [Per-Eric Larsson]
Fixed a mixup with the constants used in the Hot Sync Action Dialog
[Jean-Francois]
Added an Exists function to the Palm table [Alain Falanga]
Changed Category field for TpfgPalmRemoteTable to CategoryFilter; this is
to avoid confusion with the field Category property, which is specific to
the current record [Per-Eric Larsson]
Added a RemoteFile property to the TpfgConduitRegister component
[Jean-Francois]
Separated all of the error related functionality into pfgPalmSyncError.pas
[Per-Eric Larsson]
Moved the format helper functions (such as TimSecondsToDateTime) to the
pfgPalmMisc.pas unit
Added a CardNum property to TpfgPalmRemoteTable, so that the card used can
be changed [Per-Eric Larsson]
Fixed a bug in the SetRecNo that was calling the SyncReadRecordById rather
than SyncReadRecordByIndex. Also renamed the property to RecNum.
Introduced a LocateByID method for quickly jumping to a specified record
[Per-Eric Larsson]
The Fields.RecordID property ahs been slightly modified to now be writable -
by using this property you can set the record ID to save as without changing
the current record
[Note: Be careful with writing to Fields.RecordID; only existing Record IDs
that have been allocated by the Palm to records in the database are valid -
this property is mainly of use when performing synchronization, and you want
a new record to be saved over a specific existing one without bothering to
directly move to the old record and read it's contents into the field buffer]
Fixed the TimeType definition so it was packed record, rather than
simply record (to avoid field alignment problems)
Added a DateTime type to the list of available fields. It represents a
table field stored in the format of the Palm DateTimeType record
Fixed a slight glitch in passing out a variant array for custom field types
There have also been some minor tweaks in the code that aren't worth
mentioning
Created a new helper class TpfgRecordBuffer, in pfgRecBuff.pas, that
provides a simple list for containing the primary key details of all the
records in a primary key based table - I wrote it for an internal project,
but it may be of use to others if you're performing a manual synchronization.
Date/times passed to the PC are actually in Unix format - included a
unit pelDateTime.pas provided by Per-Eric Larsson that contains conversion
functions, and changed references in pfgPalmInf.pas to use them. The old
routines are still being kept since they're usefull for users defined date/time
fields based on Palm date/time types [Per-Eric Larsson]
Joined all the icons into one resource file pfgPalmIcons.res [Per-Eric Larsson]
Fixed a boundary value problem for saving out DWORD fields [Per-Eric &
some-one else, but I can't dig up who it was]
Moved the TpfgPalmTable.Fields property from published to public, where it
belongs [Per-Eric Larsson]
GetNextRecord now reads in the record category value [Per-Eric Larsson]
Fixed a minor glitch in DateTimeToPalmDate [Per-Eric Larsson]
Fixed a glitch of saving to a record ID in PostRecord [Per-Eric Larsson]
Added a Cancel method to the tables - can't believe I overlooked it
[Per-Eric Larsson]
Added a byte re-odering for the Palm 2-byte date type [Per-Eric Larsson]
Converted the conduit registration method call checks to use PalmCheck, and
now display the friendly error message for any returned error codes
[Per-Eric Larsson]
Removed "DWORD" and "PDWORD" types from pfgWTypes.pas, since it was
conflicting with an existing declaration in Windows.pas
Converted the database creation flags (previously Flags, now dbFlags) field
from a LongWord to a Delphi set [Martin Casatti]
Tweaked the GetNextRecord code slightly for the end-of-file case
Added a new unit - pfgUserManager.pas (and pfgUserData.pas), which
implements the TpfgUserManager component - which manages the list of
installed users [Per-Eric Larsson]
Added a new remote table icon [Per-Eric Larsson]
Version 1.2
- Fixed some minor bugs reported by Per-Eric Larsson
- Made the singleton component only be active at runtime, to allow viewing
single instances on multiple forms (as in referring to the settings on
a different project's main form) [suggested by Per-Eric Larsson]
- Added the ability to Assign() copy the field list
- Added a Delete method, as well as a method to delete based on a specific
record ID [suggested by Per-Eric Larsson]
Version 1.0
This is the initial release of my in-progress library for aiding development of Pilot conduits in Delphi.
Currently targetted is CDK 4 [I know CDK 4.1 has come out with rudimentary COM support, but I haven't
had the time to go through it yet]. Full source is included, developed using Delphi 5, although Delphi 4
should work just as well with a bit of tweaking to the .dpk file.
Please, any bug fixes or comments should be posted on the Sourceforge forums