VXPLib Modification Log


This document contains description of all modifications made in the VXPLib.DLL component after version 0.70
Version Date Modifications
1.06
Release
18.02.2005 Releasing version 1.06 of the component with one new feature, version update, and string predefinitions in the source code:
  • When using interface IVXPTooltip directly, to show the tooltip manually, it often was necessary to hide/display the tooltip programmatically to synchronize its visibility with some other window, like main window of the application, for instance. Now the interface got new property SyncWnd that can contain handle of a window. When you set this to a non-NULL value, IVXPTooltip will be showing/hiding the tooltip on its own when that window is activated/deactivated accordingly.
    Example: You have a main window and a simple static tooltip that you control yourself. You also want the tooltip disappear/appear automatically with activation of your main window. This smart functionality will be provided just as you set SyncWnd to your main window.
  • Throughout change of component's version to 1.06 Release. Now the component will show in all lists of components as VXPLibrary 1.06
  • Modified string predefinitions in the source code to avoid any problems of compilation after converting the project under VS.NET
1.05
Build 1
Release
14.06.2004 Releasing the component as version 1.05 with one new function and a fix in another one:
  • IVXPQuickHTML has acquired a new function for powerful handling of plain text when converting it into HTML. The new function TextToHTMLEx extends far beyond its old implementation TextToHTML providing lots of new parameters. It is now much a safer way for converting plain text, because the function allows specifying maximum number of rows along with many other new parameters for full control over the text conversion. It is strongly recommended to be using the new function when the plain text is of unknown length. For details read the updated documentation.
  • Implementation of function TextToHTML was replaced completely. Now the function simply forwards itself into the new TextToHTMLEx function providing some default parameters. This automatically fixed three known issues that existed in the function.
1.04
Build 3
06.06.2004 A few minor modifications were missed here in this log, because we thought those comments on SourceForge would be enough. In here we underline all changes made since version 1.04 Beta:
  • We found out that some compilers, like Borland C++ Builder fail to import properly COM servers with embedded help in the type library when it contains more than 1 line of text. That was misfortunate to simplify the help formatting, but we had to do that just for that particular compiler.
  • A situation was pointed out in VS.NET when using interface IVXPTooltipManager could cause crash switching from menus into some system-wide dialog box. This is fixed now.
Since the project has proven to be very reliable we decided to avoid the misleading enumeration of the project's versions as Beta, and now only use the word Build.
1.04
Beta
22.02.2004 The project has become Open-Source. The only modifications made since were to remove the commercial part from the component:
  • Completely removed license verification code. Function GetLicences of interface IVXPQuickHTML will be always returning 1 for backward compatibility.
  • Redesigned AboutBox of the component to only contain legal notice and version information.
1.03
Release
20.07.2003 Changes since version 1.03 Beta:
  • Moved the newly added property OSVersion from interface IVXPQuickHTML into interface IVXPSettings, and renamed it into osVersion
  • Changed the component's version to be 1.03 Release
  • Brushed up on some English in the component's type library documentation
1.03
Beta
14.07.2003 New modifications and features:
  • Removed dependency on function GetLongPathName on NT4. This function wasn't available on NT4, therefore causing a problem with registering the component.
  • Fixed a bug that in a rare situation when property ShowDelay was set to 0 the tooltip depending on other parameters might flick on the screen.
  • Fixed a bug in function TextToHTML which in some situations didn't break text into several lines properly when more than one special symbol was encountered on the same line. Also improved the way this function handles extra symbols Space in the end and beginning of lines to be split
  • Removed mistakenly left in version 1.02 of VXPLib writing a debug text string into debug window of whatever environment where VXPLib was used every time interface IVXPTooltipManager was hooking a menu.
  • Added property OSVersion to interface IVXPQuickHTML. Since the component is often used on many versions of Windows OS, and some limitations on old systems take place as we described them, we decided to put this property in the core interface to simplify control over Windows versions on any development platform. This property will always have one of the following values:
    Version Value Description
    osUnknown 0 Cannot identify current OS
    osWindowsNT3 1 Microsoft ® Windows NT 3.51
    osWindows95 2 Microsoft ® Windows 95
    osWindowsNT4 3 Microsoft ® Windows NT 4.0
    osWindows98 4 Microsoft ® Windows 98
    osWindowsMe 5 Microsoft ® Windows Me
    osWindows2000 6 Microsoft ® Windows 2000
    osWindowsXP 7 Microsoft ® Windows XP
    osWindows2003Server 8 Microsoft ® Windows 2003 Server family
    osWindowsLonghorn 9 Possibly, Microsoft ® Windows Longhorn. Generation of OS later than Microsoft ® Windows 2003 Server
    Note: It is very unlikely that property OSVersion will ever have value osUnknown or osWindowsNT3
1.02
Patch
06.06.2003 This patch upgrades the component to Version 1.02 bringing a new level of scalability to VXPLib tooltips used in complex applications.
When used in big applications it is natural to implement not just tooltips as such but also use all possible shapes of the tooltip window, accessing multiple resources of HTML documents and graphics. This is where it becomes inevitable using multiple instances of the IVXPTooltipManager interface. Functionality of this interface is much into scanning context under the mouse cursor and providing tooltips for the right context. In the situation with a complex application we might deal with 10 or even more instances of IVXPTooltipManager. The multitude of those instances will be scanning the overall application context at all times of their lifetime, which in case of having that many instances may have a little effect on the application speed.
We made a few optimizations to the way several instances of the IVXPTooltipManager synchronize their work to reduce CPU consumption. Furthermore, we added a new property IgnoreMenus to IVXPTooltipManager to be able to reduce menu-hook operations conducted by IVXPTooltipManager to the minimum. It is recommended that when used in applications with multiple instances of the IVXPTooltipManager interface to set this property to the value of True for all those instances that do not need to display tooltips for menus. This simply will tell such interfaces not to hook menus in the application, that way reducing usage of system resources.
1.01
Release
31.05.2003
  • Fixed a minor bug for the tooltip window: When flipping from top to the bottom the tooltip window sometimes might leave its tail part not removed completely from the screen, if the tooltip window didn't have transparency enabled.
  • Added property MouseClickResponse of type VXPMouseClickResponse to the VXPTooltip interface. The new property allows to specify behavior of the tooltip window in response to any mouse-click event within the client process.
  • Added new event OnMouseClick in VXPTooltip to be fired whenever a mouse click occurs while the tooltip window is visible.
  • Fixed a problem with multi-monitor configurations: when the primary monitor was installed as the right-most, and secondary monitors on the left the tooltip wouldn't flip to the left when reaching the right border of the primary monitor
  • Fixed a bug that wouldn't let correct use of VXPLib.dll on Window 95
  • Removed dependency of VXPLib.dll on file MSIMG32.DLL so it would be no longer required.
  • Implemented the GradientFillRect function to also work on Windows 95/NT4, thus enabling all gradient effects on those operational systems.
1.01
Beta
18.05.2003
  • Implemented support for Windows 95/98/Me using MSLU platform: Microsoft Layer for Unicode. Read details here
  • Removed previously imposed limitation on using tag CONTROL that such tag wouldn't be recognized if it didn't have valid attribute ID specified in it. Now the tag is recognized even without attribute ID.
  • Added new function GetControlAttrIdx similar to GetControlAttr, except the new function takes index of the CONTROL tag instead of ID. If the index is bigger than the value returned by function GetControlsInfo() - 1 then GetControlsAttrIdx will throw a new supported exception EX_INDEXOUTOFRANGE
  • Modified function GetControlsInfo(): two parameters MinID and MaxID were made optional. Also optimized speed of this function: if called more than once for the same document it doesn't recalculate the result but returns it immediately.
  • Documented function GetControlsInfo in the type library, and redocumented a few other functions.
  • Added a feature that if you attach a tooltip to a toolbar control and all command buttons on it then tooltips for command buttons will have priority over the tooltip for the entire toolbar.
  • Optimized drawing operations for the tooltip window.
1.00
Release
12/05/2003
  • Changed the component's version from 1.00 Release Candidate 1 to 1.00 Release
  • Modified 17 methods that didn't return any result to return a value indicating success or failure:
    • Methods of interface IVXPQuickHTML: Draw, DrawState, DrawStretched and RecalculateLayout
    • Methods of interface IVXPTooltip: Subscribe, Unsubscribe, Create, Destroy, Hide, Show and ShowAt.
    • Methods of interface IVXPTooltipManager: UpdateContextMenuOwner
    • Methods of interface IVXPMenuHook: DrawItemBackground, DrawItemBackgroundEx and DrawMenuBar
    • Methods of interface IVXPFont: SetFromHandle and SetFromSystemFont
    These modifications made the component incompatible with its previous versions, and applications that use the component will need to be recompiled.
  • Implemented the actual license verification. The number of available licenses is returned by method GetLicenses of the IVXPQuickHTML interface.
  • Completely redesigned the AboutBox of the component to contain license information.
  • Added method AddToolbarWndClass to interface IVXPTooltipManager for adding a toolbar class via window handle of the toolbar control.
  • Added method GetControlsInfo to interface IVXPQuickHTML to return statistics on tags CONTROL used in the current QHTML document.
  • Modified tag CONTROL so that if it doesn't have a valid ID attribute specified such control won't be accessible, and the parser won't reserve any space for it even if the control has attributes WIDTH and HEIGHT specified in it.
  • Modified functionality of all timers in the component to ensure better reliability.
  • Fixed one bug in interface IVXPTooltip that it wouldn't restore correctly transparency of the tooltip window sometimes when property FadeShow was set to 0.
  • Added recursion exceptions to interface IVXPQuickHTML, method RecalculateLayout: If this method is called directly or indirectly while handling one of the parser's events the parser will throw a new exception called ER_RECURSIVECALL.
  • Added recursion exceptions to interface IVXPTooltip, methods Show, ShowAt and Hide: If one of these methods is called while handling an event of the interface it will throw a new exception called ER_TOOLRECURSION.
  • Added previously documented but not implemented system colors: GRADIENTACTIVECAPTION and GRADIENTINACTIVECAPTION. Because these names for colors are too long the parser will also recognize their abbreviations GAC and GIC correspondingly.
1.00
RC1
16/04/2003
  • Changed the version of the component to 1.00 Release Candidate 1
  • Added two new types of tag attributes supported by functions GetBodyAttr and GetControlAttr of the parser: taBoolean and taDateTime. Both types use locales to work with "True/False" strings for taBoolean and month/week names for taDateTime. The two new types were implemented through API functions VarDateFromStr and VarBoolFromStr using LANG_USER_DEFAULT in both cases for the LCID parameter.
  • Added a new tooltip theme in interface IVXPTooltip: ttSlick={FadeHide=1, FadeShow=1, Rounded=3, HasTail=True, HasBorder=True, HasShadow=True}
0.81 11.04.2003
  • Substantial modifications in the kernel of VXPLib:
    1. Optimization of table parsing
    2. Implementing protection against erroneous QHTML documents.
    3. Optimization for accessing inner dictionaries of the parser
  • Fixed a bug in function TextToHTML. When used with LimitText different from 0 it might in some situations skip special symbols without changing them into HTML format.
  • Fixed a bug in table formatting. In some situations with formatting tables of wrong QHTML syntax the parser might throw an exception.
  • New feature: Licensing support. New function GetLicenses of the parser will return the number of purchased licenses available on your PC, or 0 otherwise. Because the current version on VXPLib is marked as Demo the GetLicenses function always returns 0. Details on terms of licensing and distribution of the component will become available on the day of releasing the component.
0.80 10.04.2003
  • Modified part of the parser responsible for table formatting to provide better protection against incorrect QHTML documents. This fixes some situations when the parser couldn't handle wrong QHTML syntax and was drawing some Picasso pictures.
  • New function TextToHTML was added to the parser. As the name suggests the function converts simple text into HTML. This function may come very useful when formatting QHTML documents with some text parameters, and it is necessary to make sure that text parameters when put in QHTML won't corrupt the original QHTML document.
    For more details read VXPLib Documentation
0.79 03.04.2003
  • Substantial optimizations and fixes for tooltips:
    1. When properties FadeHide, FadeShow and Transparency become equal 0, 0 and 255 respectively the tooltip window will remove its style of a Layered Window automatically. This will result in much faster painting and moving for such tooltip window, especially of a big size. Just as one of the three properties acquire a different value Layered Window style of the tooltip is restored automatically.
    2. When the tooltip uses a tail and well-rounded corners, and such tooltip approaches a border of the desktop window it would flick-move its orientation sometimes showing a leftover trace in the old place for just a fraction of second. This has been fixed now.
    3. When more than one instance of tooltips was used by the same client two instances might sometimes mistakenly interfere in functionality of each other. This has been fixed.
  • A few optimizations to the kernel of the component have been made to provide even better reliability and insurance against unpredicted situations.
0.78 29.03.2003
  • Fixed a bug that effected two functions: GetBodyAttr and GetControlAttr. They both used function ClearVariant to return VT_EMPTY when the requested value couldn't be found. According to MSDN this function is supposed to set VT_EMPTY in field vt when it returns S_OK. It doesn't. It happens to be just another bug in Microsoft Windows.
    After this fix if the attribute is not found the return value is always empty. For instance, in VB6 correct verification would be:
    If IsEmpty(ReturnedAttrValue) Then
        '...Attribute not found
    End If

    while in VB.NET it would be:
    If ReturnedAttrValue = Nothing Then
        '...Attribute not found
    End If
0.77 26/03/2003
  • Type VXPBodyAttribute was renamed into VXPTagAttribute because of the new feature described below. It also has got a new supported type taPercent to read values passed in the format of 0% through 100%.
  • Introducing a new feature: Integration of User Interface and QHTML
    QHTML now supports a new tag called CONTROL. This tag has five standard attributes:
    1. ID - id of the tag to uniquely identify each tag CONTROL within one QHTML document. Tag CONTROL can be identified by any 32-bit integer value, negative or positive, but different from 0. Note: The same QHTML document must not have more than one tag CONTROL with the same ID.
    2. NAME - any text, if there's a need in such. For instance, if a control is created dynamically it might make sense passing class name of the control to be created
    3. WIDTH - width of the control, if it is known at design time
    4. HEIGHT - height of the control, if it is known at design time
    5. PARAM - any text string, if there's a need in such
    When it is time to position controls associated with the QHTML document the application should call a new function of the parser called GetControlPos(ID, &X, &Y, &W, &H) to get position and dimension of the control identified by its ID. If the function succeeds in finding a control with the specified ID it returns True. Note: the returned position is relative to coordinate {0, 0} of the object where QHTML is to be drawn.
    When attributes WIDTH and HEIGHT cannot be specified statically in QHTML the client will have to handle a new event supported by the parser, and called OnControlGetSize(long ID, String Name, short & Width, short & Height, String Param). In this event the client will have to set Width and Height for the control with the passed ID. If the control is not just resized dynamically but also created dynamically then it can be created while handling this event.
    For tag CONTROL the parser also supports custom attributes that can be retrieved using a new function VARIANT GetControlAttr(long ID, String attrName, VXPTagAttribute attrType = taText) If the parser finds the control with the specified ID, and it has attribute with name attrName the function returns the value transformed to type attrType. This function features properties of XML with custom attributes. Custom attributes can be used for initializing controls embedded into QHTML

    Conclusion: This feature introduces a new age for VXPLib integrating core features of HTML (visual formatting syntax), XML (custom attributes) and ASP.NET (dynamic object creation), supplied by lots of extra features specific to QHTML itself. For instance, QHTML instead of for drawing can be used just to format objects of the user interface as shown in example Static Controls. Another example - easy implementation of skins for user interface using QHTML. Example Static Controls shows it as well.

    P.S. A VC++ example called Static Controls is available immediately. It shows just one way of using the new feature.
0.76 24/03/2003
  • Substantial speed optimization for Transparent output. Effects menus and many other examples.
  • Resources of the VXPLib.DLL file were modified: AboutBox and Debug Tooltips were redesigned.
0.75 23/03/2003
  • Optimized speed of background filling with graphics of all formats
  • Refixed bug with the bottom <TR> tag
  • Introducing a new feature: Default Icon Size.
    When drawing an icon using tag <IMG> with omitted attributes WIDTH and HEIGHT, or for background filling all icons were loaded with their system default dimension 32x32. While it wouldn't be well founded to allow resizing graphics to populate rectangle areas because of the speed issue it is reasonable to do so for icons, because they can have a few resolutions in one icon. Therefore, two new properties were added to interface IVXPSettings: DefIconWidth and DefIconHeight. Whenever used in tag <IMG>, if WIDTH and/or HEIGHT are skipped such will be taken from the two new properties. Values of these properties will also define size of icons when they are used for background filling. This is why both of them have default value 32.
    Unlike all other properties of interface IVXPSettings these are static ones, which means their values are not changed automatically when a new QHTML document is set, and in order to set their value you won't need to handle event OnSetDefaults. Instead, it can be done right after creating the parser instance.
    P.S. This feature was suggested by Robert Simpson
0.74 20/03/2003
  • Fixed a very old bug for tag <TR> that when it is the very bottom one in the table property BGCOLOR didn't work. This one was very difficult to discover, because it wasn't used very often, and for tags <TABLE> and <TD> attribute BGCOLOR always worked correctly.
    Note: As a result, the newly added attribute GFC also wouldn't work for the very bottom <TR> before this fix.
  • Documented property sysFadedMenus of interface IVXPMenuHook in the type library, which was mistakenly skipped in version 0.72
  • Fixed a bug found by Robert Simpson:
    When a QHTML document refers to more than one resource file to load standard image resources, and those image resources have the same types and resource ID-s the parser always loads the image from the resource file it opens first. This turned out to be a Windows bug described here.
  • Improved speed and quality of displaying icons via tag <IMG>, and when populating background areas.
  • Introducing a new feature: Custom Attributes. Interface IVXPQuickHTML got a new function called GetBodyAttr that allows retrieving value of any attribute specified in tag <BODY> from the current QHTML document. The parser returns values of both standard and custom attributes converted to any value the client application needs.
    The function has the following syntax:
    Variant GetBodyAttr(String attrName, VXPBodyAttribute attrType = baText);
    It takes name of the attribute, which is not case-sensitive and ignores spaces, and the format to which the return result must be transformed. By default the format is baText - a simple text string. All supported types of body attributes are presented by a newly added type VXPBodyAttribute ={baText, baColor, baByte, baShort, baLong, baFloat, baDouble}, names of which are quite self-descriptive. If the function doesn't find the requested attribute it returns an empty value. For VB developers, as an example, this is to be handled by using OnError GoTo Label.
    By using this feature applications can store additional parameters of an object right in the QHTML document. For instance, any derived from IVXPQuickHTML class/object that uses QHTML now can retrieve its initialization parameters right from QHTML instead of passing them in the program code.
0.73 16/03/2003
  • Fixed bug with color BLUEVIOLET, which was defined as #8AEBE2 though it should be #8A2BE2.
  • Introducing a new feature: Gradient Filling. This feature was implemented using API function GradientFill as described in MSDN.
    • All tags that supported attribute BGCOLOR (<TABLE>, <TR>, <TD>, <DOC>, <IMG> and <BODY>) now got two new attributes: GFC (Gradient Fill Color) and GRAD (Gradient direction) = {HOR, VERT}. When GFC is specified the parser applies gradient filling from color BGCOLOR to GFC in direction specified by GRAD. By default GRAD is set to HOR (Horizontal gradient).
    • Interface IVXPSettings got three new properties: gfColor - Gradient Fill Color as specified by attribute GFC in tag <BODY>; gfEnabled - contains true, if gfColor is valid (if it was specified); gfHorizontal - gradient direction as set by attribute GRAD in tag <BODY>. Note that value of attribute GRAD is always only within the scope of the tag that uses it.
    • As a result, interface IVXPTooltip automatically acquires the new feature, and GFC defined in tag <BODY> extends over the body of the whole tooltip.
    • Interface IVXPQuickHTML got an auxiliary, not bound to QHTML function GradientFillRect to fill rectangle areas using gradient effect. It is to simplify and unify usage of the gradient effect by applications on all development platforms.
0.72 09/03/2003
  • Fixed a bug caused by incorrect adding of property Activator in the previous build. The bug was that without setting property Activator tooltips wouldn't show at all.
  • Implemented a few optimizations and improvements in functionality of properties MenuTransparency and WindowTransparency of the IVXPMenuHook interface.
  • Added property sysFadedMenus for interface IVXPMenuHook
    This is a Boolean read-only variable that tells whether in the system was set up fading effect for all menus. If the value is True it is not recommended to use property MenuTransparency, as such will be overridden by the animation effect set in the system.
0.71 08/03/2003
  • Added property Activator to interface IVXPTooltipManager
    This property can hold a handle of a window that will act as activator for the tooltip manager interface. The interface will be verifying that if this property is not NULL, and the window handle of which was set as Activator is active the interface can show tooltips. Just as the activation window becomes inactive the tooltip manager will hide the tooltip immediately.
    By default Activator is set to NULL.
    The purpose of this feature is to automate control over tooltips activation (when tooltips can be shown and when they can't) based on the assumption that tooltips shouldn't be displayed for an inactive window or its contents.
  • Added property WindowTransparency for interface IVXPMenuHook
    This is a one-byte value from 0 to 255 that defines the level of transparency of the window hooked by the interface:
    The value of 0 corresponds to complete invisibility; The value of 255 corresponds to absolutely opaque window.
    The default value is 255.
    Note: When setting this property to a value of transparency keep in mind that depending on the size of the window to which you apply this property, and PC configuration it can consume too much CPU time, especially when resizing the window. Therefore, it is recommended to provide this feature as an option in your application.
    In general, it is recommended for use only with non-resizable windows of small size like dialog boxes.
  • Added property MenuTransparency for interface IVXPMenuHook
    This is a one-byte value from 0 to 255 that defines the level of transparency of all pop-up menus processed by the hooked window:
    The value of 0 corresponds to complete invisibility; The value of 255 corresponds to absolutely opaque window.
    The default value is 255.
This document was last updated on 18/02/2005
Copyright© 2003 - 2005 Tooltips.NET