- Delphi 2007 changed the implementation of CreateFmtHelp so that it clears the Win32 'last error'. Therefore, it was impossible to detect windows error in detection handler when EGpHugeFile help context was hcHFWindowsError. To circumvent the problem, all EGpHugeFile help contexts were changed to a negative value. HcHFWindowsError constant was removed. All Win32 API errors are passed in the HelpContext unchanged. IOW, if HelpContext > 0, it contains an Win32 API error code, otherwise it contains one of hcHF constants.
- Added method TGpHugeFile.GetTime and property TGpHugeFile.FileTime.
- Added AppendToFile helper functions (two overloads).
- Added ReadTag and WriteTag support for int64 and WideString data.
- Added two overloaded SafeCreateFileStream versions returning exception message.
- Added Append stream helper.
- Added AutoDestroyWrappedStream property to the TGpStreamWindow class.
- Added TGpBufferedStream class. At the moment, only reading is buffered while writing is implemented as a pass-through operation.
- Made 'count' parameter to CopyStream optional, the same way as TStream.CopyFrom is implemented.
- Check for < 0 position in TGpStreamWindow.Seek.
- Fixed reading/writing of zero bytes in TGpStreamWindow.
- Added bunch of 'inline' directives.
- Implemented TGpClassList, a TStringList-based list of classes. Class names must be unique. Useful when you need to implement a class registry to generate objects from class names.
- Added Walk enumerator to the TGpIntegerList and TGpInt64List. This enumerator allows list modifications (Add, Insert, Delete) from the enumeration consumer. IOW, you can do this:
for idx in list.Walk do
if SomeCondition(list[idx]) then
- Modified TGpCountedInt64List to store int64 counters.
- Added property ItemCounter to TGpCountedIntegerList and TGpCountedInt64List.
- Added Slice(from, to) enumerator to TGpIntegerList and TGpInt64List.
- Add TGpObjectRingBuffer and TGpDoublyLinkedList enumerators. Both lock access to the list during the enumeration process if multithreaded mode is enabled.
- Added method Contains to TGpIntegerList, TGpInt64List, TGpCountedStringList, TGpTMethodList.
- When TGpIntegerObjectList or TGpInt64ObjectList was Sorted and with Duplicates set to dupIgnore, calling AddObject with item that was already in the list caused internal exception.
- Enumerators changed to records with GetCurrent inlined, as suggested in More fun with Enumerators.
- Implemented DateLT, DateLE, DateGT, DateGE.
- Added procedures DSiCenterRectInRect and DSiMakeRectFullyVisibleOnRect.
- Added DSiTerminateProcessById procedure.
- Added three performance counter helpers DSiPerfCounterToMS, DSiPerfCounterToUS, and DSiQueryPerfCounterAsUS.
- Added function DSiTimeGetTime64.
- Added function DSiGetProcessFileName.
- Added function DSiEditShortcut.
- Added function DSiInitFontToSystemDefault.
- Added many SHGetSpecialFolderLocation folder constants.
- Added ShGetSpecialFolderLocation flags CSIDL_FLAG_DONT_UNEXPAND and CSIDL_FLAG_DONT_VERIFY.
- Added dynamically loaded API forwarder DSiSetSuspendState.
- Added dynamically loaded API forwarders DSiEnumProcessModules, DSiGetModuleFileNameEx, and DSiGetProcessImageFileName.
- Changed DSiIsAdmin to use big enough buffer for token data.
- Changed DSiIsAdmin to ignore SE_GROUP_ENABLED attribute because function was sometimes incorrectly returning False.
- Added parameter 'parameters' to DSiCreateShortcut and DSiGetShortcutInfo.
- More stringent checking in DSiGetProcessWindow.