Toolbar2000 Revision History

Copyright © 1998-2005 Jordan Russell. All rights reserved.
For conditions of distribution and use, see LICENSE.txt.

### 2.1.6 (2005-07-30)

- The captions of floating toolbars are now grayed when their parent forms are inactive (e.g., when a modal dialog is up).
- Replaced various global "var"s with "threadvar"s to improve thread safety when Toolbar2000 is used in a browser-embedded ActiveForm. (Note that this can never be 100% safe because the VCL itself has some thread safety issues.)
- Fix: When running on an Athlon 64 CPU with the Cool'n'Quiet feature enabled, menus animated at approximately half the expected speed when the CPU utilization was low. (Previously, it used QueryPerformanceCounter to time the animation, but with Cool'n'Quiet enabled, the rate at which the performance counter increments actually varies depending on the current CPU clock frequency. Now it uses GetTickCount instead.)
- Fix: In the Delphi 2005 IDE, toolbar editor forms could fall behind the IDE's main form.
- Fix: When an EXE contained a Toolbar2000 menu bar, and a modal Delphi form hosted in a DLL was currently active, pressing Alt would open the menu bar in the EXE even though the form containing the menu bar was disabled/inactive.
- Fix: Fixed MSAA bug reported in "Accessibility issue with Window-Eyes" thread on newsgroup 2005-06-21.
- Internal tweaks and trivial fixes.

### 2.1.5 (2004-12-13)

- Packages for Delphi 2005 are now included.
- Added new RadioItem property to TTBCustomItem and descendants. Like the property of the same name on TMenuItem, it causes the item to display a circle instead of a check mark when the item is checked and no other image has been specified.
- Like standard menus, it now prevents other applications from stealing the focus while a menu is open. This should make it fully compatible with Tweak UI's X-Mouse option.
- If the application displays a modal dialog of its own while a menu is open, the menu will now be hidden.
- TTBCustomDockableWindow and descendants: Made Canvas a public property.
- Fix "ImageIndex on toolbutton incorrectly overriden by action's imageindex" issue reported on newsgroup 2004-09-02 by Anthony Egerton.
  (Note: The problem described in the thread isn't Toolbar2000 specific. Standard menus and controls will continue to exhibit the same problem.)
- TMainMenu/TPopupMenu converter: Now additionally transfers the AutoCheck, GroupIndex, and RadioItem properties.
- Internal tweaks.

### 2.1.4 (2004-02-28)

- Toolbar2000 may now alternatively, at your option, be used and/or distributed under the terms of the GNU General Public License. Please see the updated LICENSE.txt file for more information on the two licensing options.
  Note that if you choose the GPL license option, your application as a whole must also be licensed under the GPL. Therefore, you cannot choose the GPL license option if your application is proprietary/closed-source.
- Reworded point 5 of the Toolbar2000 License for clarity.
- Added new ChevronPriorityForNewItems property to TTBToolbar.

### 2.1.3 (2003-11-23)

- Added new tboNoAutoHint value to the Options property. When set, the automatic hint generation feature (introduced in 2.1.1) will be disabled.
- On Windows NT/2000/XP, use SetWindowsHookExW instead of SetWindowsHookEx to work around apparent OS bug reported on the newsgroup by George Kyrou 2003-09-23.
- Tweak to HookProc in TB2Toolbar.pas to avoid ANSI/Unicode character set issue with hooks on Windows NT/2000/XP.
- Fix: When a TTBEditItem was focused, it didn't inherit the font settings from the parent toolbar.

### 2.1.2 (2003-08-10)

- It's now possible to nest "group" items such as TTBGroupItem. Previously, placing one group item inside another did not work.
- Tweaked the automatic hint generation introduced in the last version: It now will not generate hints for submenu items unless the submenu item has the DropdownCombo property set to True or the submenu item has no visible caption.
- TTBControlItem is no longer explicitly registered. There is a slim chance that this change may affect you if your application initially used one of the very early Toolbar2000 betas. In those early betas, Toolbar2000 did not assign to the Name property of TTBControlItem components it created. If you have unnamed TTBControlItem components on your forms, you must now assign them names, otherwise you might receive a "class not found" error message when running your application.
- Fix: TTBEditItem would lose the focus when Alt+[keypad digit] was pressed.
- Internal tweaks.

### 2.1.1-beta (2003-07-13)

- Now automatically supplies short hints for items with no short hint assigned to the Hint property. The hint is derived from the item's caption, with accelerator keys and any trailing colon or ellipsis stripped.
- Shortcut text is now displayed in the hints of items that don't have associated Actions.
- Fix: In TTBMRUList, "&" characters in filenames weren't escaped when assigning item captions.
- MSAA-related tweaks:
  - Escape any "&" characters when assigning text to chevron item's Caption property.
  - Work around bug in Delphi/C++Builder 4's ShortCutToText function.
- Internal tweaks.

### 2.1.0-beta (2003-07-05)

- Microsoft Active Accessibility support for Toolbar2000's menus and toolbars. This exclusive feature will make your application's user interface more accessible to users who rely on screen readers. For more details, see the MSAA Support topic in the help file.
- When new items are inserted programmatically at run-time, they are now placed at the top of the "priority list" instead of at the bottom. This means that new items will now be the last to move onto the chevron menu when all items can't fit on the toolbar.
- On popup menus, accelerator keys are now properly hidden if the last input came from the mouse.
- On TTBMDIButtonsItem, the biMinimize setting of BorderIcons on MDI child forms is now respected.
- As a performance optimization, the default image base of the Delphi design and run-time packages have been changed from $400000 to $3F800000 and $3FC00000 respectively.
  (The C++Builder packages remain at $400000 due to a design flaw in the C++Builder linker: it strips the image's relocation table whenever the base address is changed from $400000. DLLs must have relocation tables in order to load properly in all cases.)
- Fix: When a top-level DropdownCombo=True submenu item is selected using Alt+[accelerator key] the item is now clicked instead of opened.
- Fix: When F1 was pressed on a menu item and Toolbar2000 handled it, a WM_HELP message would still reach the parent form.
- Fix: A focused TTBEditItem would lose the focus when Alt+Shift was pressed.
- Many internal changes, most of them necessary for supporting MSAA as cleanly as possible.

### 2.0.16 (2003-03-28)

- Added new tboSameWidth value to the Options property. When set along with tboImageAboveCaption on two or more items on the same view, the items will be stretched as necessary so that they all have the width in pixels.
- Added ChevronMoveItems property to TTBToolbar. Normally, when an item on a toolbar's chevron popup menu is clicked, the clicked item will move into the visible area of the toolbar in place of the least recently clicked item. Setting this property to False will disable that behavior.
- TTBCustomItem.Click now checks the Enabled property before calling any event handlers, like TMenuItem.Click does.
- TTBPopupMenu.Popup now sets the PopupPoint property.
- Published OnContextPopup event properties on TTBDock, TTBToolbar, and TTBToolWindow.
- Fixed issues with Russian characters as accelerator keys on Windows NT/2000/XP.
- Internal tweaks and trivial fixes.

### 2.0.15 (2002-09-29)

- Packages for Delphi 7 are now included.
- Revised the Toolbar2000 License Agreement.
- TTBMRUList: Added new Remove method.
  TTBMRUListStrings: IndexOf method now uses AnsiCompareFileName instead of AnsiCompareText.
- Fix: The issue reported in the "Problem with tb2k in Com Server/ActiveX" thread on the newsgroup has been fixed.
- Internal tweaks and trivial fixes.

### 2.0.14 (2002-05-10)

- Added new tboNoRotation value to Options property. When set, the item and its caption will not be rotated 270 degrees when docked vertically.
- Added Move Up and Move Down commands to the design-time editor to make it easier to move items.
- Chevron popup windows now wrap if they are too wide to fit on the screen.
- A toolbar's LastDock property is no longer updated when the toolbar is dragged over but not dropped on a dock.
- When arranging toolbars on a dock, row numbers that contain only invisible or undocked toolbars are no longer removed. This way, when the toolbars are shown/docked again, they stay on their row. This was how Toolbar97 worked.
- A toolbar's DockRow and DockPos properties got updated if you dragged the toolbar over a dock but didn't drop it on the dock. Now it restores the original DockRow and DockPos settings when a toolbar is not dropped on a dock.
- Fix: When arranging toolbars on a dock, there was a case where LimitToOneRow wasn't being checked.
- Internal tweaks.

### 2.0.13 (2002-04-06)

- New item class: TTBVisibilityToggleItem. This item class controls the Visible property of a control, such as a TTBToolbar.
- On menus, it now uses clGrayText to draw disabled text when the menu background color doesn't equal clBtnFace. (That is how standard menus work.)
- On vertically docked toolbars, it now uses a vertical font if one is available so that Asian characters aren't drawn sideways.
- Now, if at design time you double click a TTBToolbar or TTBPopupMenu that has its LinkSubitems property assigned, it asks if you want to edit the item specified by LinkSubitems instead.
- TTBEditItem: The outermost border is now transparent when the item is not selected.
- In the functions that load toolbar positions, it now compares the dock names with case insensitivity.
- Added new demo project file for C++Builder 6 - DemoBCB6 - because DemoBCB doesn't seem to compile under C++Builder 6.
- Internal tweaks.

### 2.0.12 (2002-03-06)

- Menus now display scroll arrows when they are too tall to fit on the screen.
- Packages for C++Builder 6 are now included.
- Minor tweaks and documentation updates.

### 2.0.11 (2002-02-23)

- Fix: The new Stretch property introduced in 2.0.10 had some bugs.

### 2.0.10 (2002-02-13)

- Added new Stretch property to TTBToolWindow and TTBToolbar. When True, the toolbar, when docked, will stretch to fill any unused space on the row.
- On TTBToolbar, chevrons now display a "More Buttons" hint, like Office 2000. The hint text can be customized by changing the new ChevronHint property, or globally by changing STBChevronItemMoreButtonsHint in TB2Consts.pas.
- The OnMove event of TTBToolbar/TTBToolWindow now gets fired when the bar is floating also.
- Fix: TTBPopupMenu.OnPopup was being called twice when the popup was displayed - once with the TTBPopupMenu as the Sender, and once with the internal TTBRootItem as the Sender. Now, it's called only once with the TTBPopupMenu as the Sender.
- Fix: TTBEditItem: Fixed double-click issue ("TB2k Strange Behaviour").
- Internal tweaks.

### 2.0.9 (2002-01-11)

- Added new TTBImageList component. It is an enhanced version of the standard TImageList component, designed for use with the Toolbar2000 components. It adds the ability to use special images for different item states (hot, disabled, checked). It also adds the ability to load the images from a bitmap instead of using TImageList's normal streaming mechanism, which has problems with older COMCTL32.DLL versions.
- Added new OnSelect property to TTBCustomItem and descendants. This event lets you trap when the mouse enters or leaves an item.
- Added new CharCase and OnBeginEdit properties to TTBEditItem.
- Added C++Builder version of the Demo project - DemoBCB.
- Minor tweaks and fixes.

### 2.0.8 (2001-12-27)

- Now supports "flat" menu borders on Windows XP.
- The background of a selected menu item's image is now filled with clBtnFace. This seems to look better with Windows XP's white menus.
- Made chevron popups colored clBtnFace instead of clMenu. This seems to look better on Windows XP with themes enabled.
- Fix: Fixed "stack overflow" problem that may have occurred if you had a floating TTBToolWindow and pressed Alt on the keyboard.
- Fix: On Delphi 6 the ActionComponent property of an action now gets set properly when the action is fired from a TB2k item.
- Removed some Windows NT 3.51 support code since NT 3.51 is now officially unsupported.

### 2.0.7 (2001-12-19)

- Menus now display drop-shadows on Windows XP if they are enabled in the Display Properties.
- When a menu is up, keystrokes will no longer get processed by an IME if one was active.
  Note: The ImmGetVirtualKey function is used, which is not available on Windows NT 3.51. Therefore, NT 3.51 is now officially unsupported. (It never was officially supported anyway.)
- TTBToolbar: Added new published FloatingWidth property.
- Fix: Accessing menu bars on non-main forms with the keyboard should now work.
- Minor fixes.

### 2.0.6 (2001-11-14)

- When a shortcut key is pressed, it now sends OnPopup/OnClick events to the selected item's parents so that they can update the Enabled state of the item if needed.
- The OnPopup event of TTBPopupMenu is now fired when one of its items' shortcut keys is pressed.
- TTBPopupMenu now processes shortcuts.
- Added OnUpdate event to TTBMDIWindowItem.
- Minor fixes.

### 2.0.5 (2001-10-09)

- Toolbars that are neither docked nor floating can now wrap or display a chevron (ShrinkMode is no longer ignored). For it to work, you must do at least one of the following: set AutoResize to False, set Align to one of [alTop, alBottom, alClient], or add [akLeft, akRight] to Anchors (which is now a published property).
- TTBToolWindow: Published the Align and Anchors properties.
- Now allows F1 to be handled while the mouse button is down (an odd quirk of standard menus).
- Now always streams out the Width & Height properties of a toolbar that is neither docked nor floating. Needed to properly support anchored toolbars.
- Fix: Fixed a GDI resource leak in TB2Item that occurred on Windows 9x/Me due to an undocumented difference/bug in the way SaveDC works.
- Fix: Fixed resource leak with TTBMDIHandler: it was trying to free an icon handle with DeleteObject instead of DestroyIcon.
- Fix: Made TTBPopupWindow a TCustomControl descendant instead of a TForm descendant. This resolves the issue with the Application window's taskbar button reappearing after the program initially hid it.
- Fix: When destroying a toolbar on a dock that had another toolbar on the same dock linked to one of the destroying toolbar's subitems, an AV may have occurred.
- Fix: Fixed problem in TTBView.GivePriority.

### 2.0.4 (2001-09-30)

- Added new tboImageAboveCaption value to Options property. When set, the item's caption will be displayed underneath its image, making for an Internet Explorer-like appearance.
- Added Options property to TTBPopupMenu.
- Fix: It was possible to "click" disabled top-level items by pressing Alt+[accelchar].
- Fix: Shortcut keys now work on toolbars that are on frames.
- Fixed issue with TActiveForms: OnClick events were always executed in the context of the first thread.
- Minor tweaks.

### 2.0.3 (2001-09-13)

- Added AutoCheck property to TTBCustomItem and descendants.
- Added Prefix property to TTBMRUList.
- Added Enabled property to TTBMDIWindowItem.
- Published GroupIndex property on TTBSubmenuItem and TTBEditItem.
- TTBView's Selected property is now writable.
- Fix: Sealed minor memory leak that occurred when when a TTBMDIHandler component was created, or when the LinkSubItems property of a toolbar was changed.
- Fix: Modifying a TTBBackground's bitmap after a dock that used the background was destroyed may have caused an AV.
- Fix: Alt+- didn't work unless the two keys were pressed simultaneously.
- Fix: Shortcuts didn't work if TTBToolbar.LinkSubitems was set.
- Fix: MDI buttons didn't show when FullSize=False and ShrinkMode=tbsmWrap.
- Fix: Unwrapped floating toolbars were a pixel too high.
- Fix: Hopefully fixed Delphi 6 AV with design-time editor again.

### 2.0.2 (2001-08-19)

- Added new component: TTBMDIHandler, which adds the MDI system menu and minimize/restore/close buttons to a menu bar. See the documentation for details.
- Added new item type: TTBMDIWindowItem, which expands to a list of available MDI child windows at run-time. This is intended to be placed at the end of an MDI application's Window menu, following a separator.
- The design-time menu converter can now convert TPopupMenu's too.
- The Alignment property of TTBPopupMenu is now respected. Also added optional Alignment parameter to the TTBCustomItem.Popup method.
- Added TTBCustomItem.Clear method.
- Now respects the system's "menu drop alignment" setting when dropping down menus.
- Pressing Home or End on a toolbar or menu now moves the selection to the first or last item.
- Fix: TTBToolWindow's that had their FullSize properties set to True weren't the correct size when undocked.
- Fix: Now doesn't attempt to draw or invalidate TTBControlItem's. Fixes issue with Transparent=True TLabel's.
- Fix: Now doesn't display the size-all cursor on DragHandle=dhNone toolbars.
- Fix: The keyboard shortcuts for Cut/Copy/Paste in the design-time editor now work again.
- Some minor internal tweaks.

### 2.0.1 (2001-08-04)

- Added slide/fade animation support. It is enabled automatically if the user has menu animation enabled in Windows.
- On vertical toolbars, the tboDropdownArrow arrows are now drawn rotated and below the text.
- Fix: When you have ProcessShortCuts=True toolbars on multiple forms, it now first looks for shortcuts on the active form's toolbars, and then the main form's toolbars. Previously, it looked on all forms' toolbars.
- Fix: It wasn't loading item icons correctly after design-time code was moved to the tb2kdsgn package.
- Fix: Setting EditOptions on TTBEditAction had no effect.
- Some minor internal tweaks.

### 2.0.0 (2001-07-21)

- Revised the Toolbar2000 License Agreement.
- Moved design-time units to separate tb2kdsgn_* packages so that tb2k_* may now be used as run-time packages.
- Tweaked the component icons.

### Beta Releases

### 2.0-BETA6 (2001-07-18)

- TTBMRUList: Added AddFullPath and HidePathExtension properties. Both are True by default. See documentation for details.
- TTBMRUList: Added OnChange event.
- Typing or pressing Enter on the design-time editor's tree view now activates the Object Inspector.
- Fix: On Delphi 6, the ShortCut property of TTBCustomItem was showing up like an Integer property in Object Inspector, thanks to some change Borland made. Workaround added.
- Fix: Removed call in design-time editor that appeared to cause AV's in certain cases.

### 2.0-BETA5 (2001-07-09)

- Now works around the Windows 2000 problem of delaying on the first PlaySound call by not calling PlaySound at all if there is no sound associated with the event.
- Added LoadFromIni, LoadFromRegIni, SaveToIni, SaveToRegIni methods to TTBMRUList.
- Updated documentation; added an index.
- Updated demo project.
- Fix: The change to the Click handling in 2.0-BETA4 broke exception handling.
- Fix: The OnResize event was never fired.
- A few very minor fixes and tweaks.

### 2.0-BETA4 (2001-07-01)

- Added UpdateActions property to TTBToolbar. Setting it to False can decrease CPU utilization. See the documentation for details.
- Now, as with standard menus, when an item is clicked it posts a message to the queue so that the Click handler gets called when control returns to the message loop. This fixes the problem with modal forms not correctly getting the focus when an item is selected from a menu with the keyboard.
- Fixed potential AV problem when Escape was pressed.
- Improvements to design-time editor:
  - There's now an empty item at the end of the item list, similar to Delphi's menu editor. You can't (currently) type on this item item, but you can select it and press Insert to add a new item to the end.
  - You can now hold down Shift while pressing Insert or clicking one of the New buttons to add an item to the end instead of inserting it before the currently selected item.
  - Added keyboard shortcuts for New Subitem and New Separator.
  - Now selects root item when list view is focused and no item is selected.
  - After deleting the items, it now selects the item with the focus.

### 2.0-BETA3 (2001-06-25)

- Context help (F1) is now supported on menu items.
- Added a GroupIndex property to TTBCustomItem due to popular demand. See documentation for details on how it works.
- Added a new ImageIndex property editor which is fully compatible with Delphi 6.
- It now substitutes Arial for MS Sans Serif & Microsoft Sans Serif when drawing vertical text, instead of letting Windows pick a font.
- Remarked out code in TTBDock.ArrangeToolbars that was there to work around a VCL alignment bug*, because it had some undesirable side effects. Now, if you want to avoid the bug, you need to right-click your alClient-aligned controls in the form designer and select "Send to Back."
  * The VCL alignment bug: if a control is taller or wider than the client height or width of its parent, alClient-aligned controls may appear on top of the control, instead of being hidden from view.
- Fix: When toolbars are dragged across a dock that has a background bitmap, they should no longer flicker.
- Fix: The menu converter now transfers the Tag property.
- Fix: The toolbar-dragging changes in 2.0-BETA2 broke the splitter.
- Fix: Work around an annoying Windows or VCL bug. (If you close all MDI child windows, the MDI client window gets the focus, and when it has the focus, pressing Alt+[char] doesn't send a WM_SYSCOMMAND message to the form for some reason.)
- Fix: In the design-time item editor, when a new item is created while the tree view has the focus, it now sets the focus to the list view so that the item becomes selected in Object Inspector.
- Fix: On TTBDock, LimitToOneRow=True didn't actually limit to one row while dragging.
- Various other minor tweaks and fixes.

### 2.0-BETA2 (2001-06-18)

- Delphi 6 is now supported. There is one limitation however: the ImageIndex property editor used by TTBCustomItem descendants had to be disabled because TComponentImageIndexPropertyEditor is gone in Delphi 6! Therefore, on Delphi 6, the dropdown lists of ImageIndex properties may not work correctly, at least for now.
- Text on vertical toolbars is now drawn vertically!
- Vastly improved the code that handles toolbar dragging. Previously, when you dragged a SmoothDrag=True docked toolbar over other docked toolbars, the toolbar may not have ended up on the row you were expecting. This was because the old code - ported from Toolbar97 - was not designed with smooth dragging in mind. Now it should function almost exactly like Office 2000.
- TTBEditItem (and friends): Removed DisplayAsButton property; replaced with EditOptions property. Now, by default, edits on toolbars will automatically change into buttons when the toolbar is docked vertically. Add tboUseEditWhenVertical to EditOptions to disable this.
- On wrapped toolbars, menus now pop out to the side which obscures the least amount of items, like Office 2000.
- Up/Down/Left/Right arrow keys on vertical toolbars now work like Office 2000.
- Fix: Hints on chevron popup's items didn't include shortcuts.
- Fix: Deleting an item from a TTBMRUList via Items.Delete() did not refresh the keyboard shortcuts.
- Fix: Fixed "Run-time creation of items and chevron" problem reported by Francois Rivierre.
- Some very minor tweaks.

### 2.0-BETA1 (2001-06-12)

- Updated the Toolbar2000 License Agreement.
- You can now display the version of Toolbar2000 by right-clicking a toolbar and selecting "Version".
- Added an improved Demo project.
- Made the margins of menu items a bit more like Office and standard menus.
- Now includes size of a font's external leading when calculating an menu item's height.
- Added workaround an apparent NT 4.0 & 2000 bug that was causing the right side of floating toolbars' non-client area to be painted incorrectly if the toolbar's width was greater than the screen width.
- Various tweaks to the display of disabled toolbar & menu items.