Added DropdownAlways property and OnDropdown event to TToolbarButton97. (Changed TToolbarButton97 declaration, TToolbarButton97.Click, and TToolbarButton97.SetDropdownMenu. Added TToolbarButton97.SetDropdownAlways.)
Added OnDockChangingEx and OnDockChangingHidden events to TToolbar97/TToolWindow97. (Changed TToolbar97, TToolWindow97 declarations, and TCustomToolWindow97.SetParent.)
TToolbar97.SetSlaveControl can now be called with nil in one of the parameters. This can be useful if you want a top/bottom docked version of a control, but no left/right version. (Changed TCustomToolbar97.SetControlVisible.)
Fix: Added workaround for Delphi 2 & C++Builder 1 TBitmap bug that, in certain cases, caused backgrounds on docks to not be displayed properly. (Changed TDock97.DrawBackground.)
1.67b
Multiple display monitors under Windows 98 are now properly supported. In previous versions, it wasn't letting floating toolbars be dragged outside the primary display monitor. I haven't tested the multiple monitor support on NT 5 since I don't have it, but it should work since NT 5 shares the same set of multiple monitor APIs as Windows 98.
TB97Ver.inc modified to work around an apparent bug in the Delphi 4 command line compiler. The {$ObjExportAll On} directive which was put in for C++Builder 3 caused the Delphi 4 command line compiler to not generate an output .EXE for some reason. Now it has an {$IFNDEF VER120} directive around it so that it isn't included when compiling on Delphi 4.
1.67a
On Delphi 4, the HelpContext property of TToolbarButton97 is now properly synchronized with the action's HelpContext property.
Removed the TToolWindowArrangeType declaration in tb97.pas. It was causing a conflict with TurboPower's Async Pro since it declares an atNone too, and wasn't being used by anything anyway.
1.67
Improved ActiveX compatibility. Thanks to Alan Bellingham for providing me with the fixes. (Changed GetToolWindowParentForm and added TFloatingWindowParent.CreateParams.)
Publicized the DockedTo, DockPos, and DockRow properties of TCustomToolWindow97. This way when you reference a toolbar using the Toolbars property of a dock, you don't have to use a typecast to use these properties.
Added new RegLoadToolbarPositionsEx and RegSaveToolbarPositionsEx functions. These add a new root key parameter (RootKey) than the non-Ex versions don't have. There is no reason I can think of why you'd want to save toolbar settings to a key other than HKEY_CURRENT_USER (as this would classify as a "per-user" setting), but this capability was requested.
Added new public property FloatingWidth to TToolbar97 which allows you to get or set the current width of a floating toolbar in your own code.
Published Anchors and Constraints properties in TToolbarButton97 on Delphi 4.
Published Anchors, BiDiMode, Constraints, DragKind, ParentBiDiMode, and OnEndDock properties in TEdit97 on Delphi 4.
1.66e
Fix: When compiling on Delphi 4 with range checking enabled, a range check error may have occured in the CBTHook procedure of TB97Cmn.pas. Fixed by adding an HWND typecast. (Don't we just hate Delphi 4 and its unsigned integers?)
1.66d
Fix: On TDock97's with a border, two OnResize events (instead of one) were getting fired whenever a tool window was docked for the first time. (Changed TDock97.WMNCCalcSize, TDock97.WMNCPaint, and TCustomToolWindow97.BeginMoving.MouseMove.CheckIfCanDockTo.)
1.66c
Fix: Problem with using Toolbar97 as a run-time package in C++Builder 3 finally solved. It turns out there's a special compiler directive that must be used when compiling Pascal code into a C++Builder 3 package. (Modified TB97Ver.inc.)
1.66b
Fix: OnResize events on TDock97 and TCustomToolWindow97 descendants are now only called once the component is finished loading. In certain cases earlier versions had been calling these events before the parent form's OnCreate event handler was called. (Changed TDock97.WMSize and TCustomToolWindow97.WMSize.)
1.66a
Fix: On certain situations, a runtime error 216 may have been raised if you called Halt while the Toolbar97 controls were being used. (Changed TB97Cmn.pas finalization section.)
1.66
Replaced DragHandle property on TCustomToolWindow97 and descendants with a new property called DragHandleStyle, which adds the ability to create IE4-style single drag handle toolbars.
Added Default and Cancel properties to TToolbarButton97.
Added BorderStyle property to TCustomToolWindow97 and descendants. Useless for most purposes, but several had requested a property like this.
Fix: When 256-color glyphs were used on a TToolbarButton97 control the bitmaps were being converted to device-dependent bitmaps when the form was saved, resulting in loss of the bitmap's palette if the display was set to a non-palettized mode (e.g. 16- or 24-bit color). This bug affected only Delphi 2 and C++Builder 1.
1.65f
Fix: After the change to fix Action synchronization in 1.65d, a new problem surfaced. On Windows 95/98, a "Stack Overflow" error occured in certain cases if the form was closed while a floating tool window was focused.
1.65e
Fix: If Repeating was set to True on a TToolbarButton97 control and Flat and Opaque were not True, the control was not being repainted correctly.
On Repeating=True buttons, TToolbarButton97 now calls the Click method instead of "inherited Click". This change only affects TToolbarButton97 descendants.
1.65d
Added Color property to TToolbarButton97.
Fix: Controls that used Actions on floating toolbars were not being properly synchronized in certain cases. (Changed TFloatingWindowParent.CMShowingChanged.)
Fix: Having a TPageControl on a floating TToolWindow97 caused an exception when the form was closed. The "bug" is actually in TPageControl -- I wasn't aware of it when testing version 1.65. (Removed TCustomToolWindow97.CreateWnd.)
Fix: If a TToolbarButton97 was disabled and its Down property was then set to True, it would be redrawn as if it were enabled. (Changed TToolbarButton97.SetDown.)
Fix: When Escape was pressed while a floating toolbar was focused, it would make a beep sound after focusing the form. (Changed TFloatingWindowParent.CMDialogKey.)
1.65c
Fixed a bug in TToolbarButton97 that might having been causing an access violation on program exit. Only one person has reported this, so I don't think it was a widespread problem. (Modified TToolbarButton97.Destroy & TToolbarButton97.Notification.)
Moved compiler options from TB97.pas to TB97Ver.inc so they can be included in all units, and added {$I TB97Ver.inc} to the units that didn't already have it.
1.65b
Fixed (rarely encountered) problem repainting problem on floating toolbars introduced in 1.65. (Removed TCustomToolbar97.CreateParams/WMSize methods.)
Fixed problem introduced in 1.65 with floating toolbars not being loaded with the correct size.
1.65a
Fixed two bugs that were introduced in version 1.65's TToolbarButton97 component. Buttons with DropdownCombo=True were calling their OnClick handler when the dropdown menu is displayed, and text wasn't showing on buttons with DisplayMode=bmTextOnly. (Sorry about that!)
A reported problem regarding a "list index out of bounds" error in TDock97.ArrangeToolbars should also be fixed. (I haven't gotten confirmation on this yet though.)
Two minor changes: TToolbarParams record has been moved from TB97.pas to TB97Tlbr.pas where it should be, and the MoveOnScreen(True) call has been removed from TCustomToolWindow97.SetParent's UpdateFloatingToolWindows procedure.
1.65
To make things easier to manage, the source code to the Toolbar97 components has been split into seven smaller .pas files instead of one big file. Please read the Installation section of the documentation for revised installation instructions.
Added Action property to TToolbarButton97 (Delphi 4 only).
Image lists can now be used with TToolbarButton97 through the new Images and ImageIndex properties.
Added AddDockForm and RemoveDockForm methods to TCustomToolWindow97 and descendants.
Added BeginUpdate and EndUpdate methods to TDock97.
Added Visible property to TToolbarSep97.
Added global variable ButtonsStayDown.
Floating tool windows are now drawn with gradient captions under Windows 98 & NT 5.
TCustomToolWindow97's can now be placed on non-TForm forms, like ActiveForms.
ClientWidth and ClientHeight properties of TToolWindow97 renamed to ClientAreaWidth and ClientAreaHeight. Internal changes to the code necessitated this.
TCustomToolWindow97 and descendants are now initially created with a Parent of nil, like other VCL controls. This means that dynamically created toolbars will not appear on the screen until you assign to either Parent or DockedTo. Previous versions automatically set DockedTo to nil and assigned a parent.
Assigning to TCustomToolWindow97.Parent and TCustomToolWindow97.DockedTo is now interchangable.
Floating TCustomToolWindow97's no longer appear in the parent form's tab order.
At design time, when the Visible property of a control on a TToolbar97 is set to False, it no longer loses its position in the toolbar's control arrangement.
When Esc is pressed while a control on a TCustomToolWindow97 is focused, activation now returns to the form.
Public FloatingPosition property added to TCustomToolWindow97.
On TCustomToolWindow97, CreateWnd now fails if Parent=nil.
Fix: TCustomToolWindow97's internal FloatParents are now freed upon Destroy. In previous versions, they were not freed which may have resulted in a memory leak if your application created and freed toolbars dynamically.
Fix: A WS_THICKFRAME style is no longer set on TCustomToolWindow97's whose Resizable property is set to False. Previous versions were allowing the user to resize tool windows even when Resizable=False by using the size grip.
Fix: There was a serious but rarely encountered bug in TToolbarButton97's glyph routines. If a glyph had more than 16 colors and a width that was not a multiple of 8, the resulting button would look corrupted and/or a crash of the program would occur. (Changed the internal procedure GenerateMaskBitmapFromDIB.)
Many other minor tweaks and fixes.
1.63
TToolbarButton97 now consumes amount the same amount of GDI resources as Toolbar97 versions prior to 1.6 did. In versions 1.6-1.62 I had the TBitmap.Dormant calls taken out because of a little quirk in Delphi 3's TBitmap (bitmaps are converted to bmDIBs after a call to Dormant), but it turns out this was causing more problems than it was solving. In certain cases on Windows 95 this was causing "low on resources" messages in applications with a lot of buttons. If you desire, you can still disable the Dormant call in 1.63 at run-time by setting the TToolbarButton97's new CallDormant property to False before assigning a new Glyph.
1.62
Added DragHandle property to TToolbar97.
Added Repeating, RepeatDelay, and RepeatInterval properties to TToolbarButton97.
Added OnRequestDock event to TDock97.
Renamed all references of "TToolbar97" to "TCustomToolbar97".
TToolbar97 is now a descendant of TCustomToolbar97.
Fixed a little problem with 1.61's new FullSize property: Resetting FullSize to False on a TToolbar97 now properly restores its size.
1.61
Added FullSize property and OnResize event to TToolbar97 and TToolWindow97.
Floating TToolbar97's and TToolWindow97's can no longer be dragged off the top of the screen. It now ensures that at least a portion of the title bar is always visible.
Redisabled child control alignment on TToolbar97's, like it was in 1.53 and earlier. (I inadvertently enabled it in 1.6, but it was never meant to work.)
Fixed a couple of places where invalid parameters were being passed to API calls.
1.6
Added a new component, TToolWindow97.
Added ActivateParent and HideWhenInactive properties to TToolbar97 and TToolWindow97, replaced the CanDockLeftRight property with the more flexible DockableTo, and published the TabOrder property.
Added GlyphMask, ModalResult, NoBorder, and ShowBorderWhenInactive properties to TToolbarButton97.
Added BackgroundOnToolbars property to TDock97.
TToolbarButton97 now properly supports 16- and 24-bit glyphs on Delphi 3 only. (It now includes workaround code in order to be compatible with all video drivers.) But it is recommended that you stick to 16 color bitmaps on Delphi 2 and C++Builder, because of limitations of their VCLs.
The DropdownMenu support in TToolbarButton97 improved to allow selection of menu items without having to click and release the button.
Changing a form's properties such as BorderIcons or Position at run-time no longer cause the toolbars to behave strangely. (In more technical terms, this was because changing those properties caused the form to call RecreateWnd, causing the toolbar's hook to be removed. It now uses a different method of trapping form messages.)
Fixed the momentary flickering problem that was visible while dynamically creating an MDI child form that contained an initially floating toolbar. This fix also corrects a reported problem dealing with toolbars on modal forms.
Many other minor fixes, modifications, and optimizations.
1.53
A last minute release to fix the access violation problem introduced in 1.52 when you tried deleting a TToolbar97.
1.52
TToolbarButton97 now supports buttons split into two parts (like the Undo and Redo buttons in Office 97) through the new DropdownCombo property.
Now includes a good selection of "standard" glyphs that I've collected. See the Glyphs.zip file.
Disabled glyphs are now generated differently. They now look just like Office 97 (and MFC). But for backward compatibility, you can still use the "old" TSpeedButton disabled look by setting the new OldDisabledStyle property to True.
Finally has support for a new fifth "mouse in" glyph, if you want to add an IE or Communicator look to your buttons. See the updated description of the Glyph property of TToolbarButton97.
Added ToolbarCount and Toolbars properties to TDock97.
Added a Flat property to TToolbarButton97.
Added SizeHorz and SizeVert property to TToolbarSep97.
Numerous small improvements and minor fixes. See the source code for details.
1.51
Added new OnMouseEnter and OnMouseExit events to TToolbarButton97.
In certain custom color schemes, buttons glyphs were invisible (very rare though). This wasn't a bug in Toolbar97, but is a bug in the VCL class TCustomImageList. It now works around it.
No longer calls the OnRecreating/OnRecreated events while a toolbar is being destroyed.
Now should be fully compatible with Warren Young's TMSOfficeCaption component, but only with version 1.41 or later of it. If you have an earlier version, go to http://www.ee.ed.ac.uk/~wfy/components.html and get the latest.
A few more minor improvements.
1.5
OrderIndex property added to TToolbar97 to make arranging controls at run-time much easier.
Delphi 1 support had to be removed, since it wasn't compatible with the new arranging method. Sorry, but it's time to move on.
Added an AllowDrag property to TDock97.
Added a Blank property to TToolbarSep97.
Added an OnResize event to TDock97.
Docks can now be placed inside controls other than a form. I can't think of a reason why you'd want to do this, but some people have requested this.
All known problems fixed, and a couple of small improvements.
1.47
Rewrote most of moving and resizing routines to make it work exactly like Office 97.
Added a DisplayMode property to TToolbarButton97.
Toolbars now work flawlessly on MDI child forms.
A few other minor improvements and fixes.
1.46
Added a LimitToOneRow property to TDock97.
C++Builder transparency problems in 1.45 fixed.
A minor disabled glyph transparency problem that affected Delphi 2 and C++Builder fixed.
Some minor improvements.
1.45
Dropdown menus now fully supported on TToolbarButton97.
Backgrounds on TDock97's now supported. See Background property.
Added a FixAlign property to TDock97.
Added a WordWrap property to TToolbarButton97.
The problems in 1.4 fixed.
A lot of little problems that have been around since 1.3 fixed (see source code for details).
1.4
Now supports Delphi 1 also.
Loading and saving toolbars' positions is now done with procedures called RegLoadToolbarPositions and RegSaveToolbarPositions for loading and saving to the registry, and IniLoadToolbarPositions and IniSaveToolbarPositions for loading and saving to .INI files. This corrects a problem that sometimes caused toolbars to be loaded incorrectly.
Fixed minor flickering problem while dragging.
Now prevents you from dropping a toolbar under the taskbar (32-bit only).
Several minor, but annoying, problems fixed. See source code for details.
A lot of tweaks to the source code.
1.37
Fixed problem of floating toolbars sometimes reappearing (without the program telling them to) after you closed them.
1.36
Fixed a couple of very minor and insignificant cosmetic problems. See the source code for details.
1.35
Fixes all known problems, including the rather serious problem in TToolbarButton97 of it sometimes displaying the wrong glyphs in Delphi 2.
Several more problems fixed. See the source code for details.
1.33
Added a TEdit97 component.
Fixed a lot of minor but noteworthy problems. See the source code for details.
1.32
Fixed another minor problem in TToolbar97 that caused it to sometimes incorrectly reorder the controls.
1.31
Fixed problems with loading the demo application.
Fixed a very minor problem in TToolbarButton97.
1.3
Floating toolbars are now resizable. Like Office 97, they also now hide themselves when the application is deactivated.
Separators are no longer automatically created. You now create them using the TToolbarSep97 component.
Added a CanDockLeftRight property to TToolbar97.
Added an Opaque property to TToolbarButton97. Also made the buttons now stay down until it returns from the OnClick handler, like Office 97.
A lot of small fixes on all of the controls (too many to mention) to make them work more like Office 97.
C++Builder now supported.
1.2
Left and right side docking now supported. A SetSlaveControl method added to TToolbar97 for designating top/bottom docked and left/right docked versions of controls on the toolbar.
A lot of little problems fixed.
1.11
Added a CloseButton property to TToolbar97.
More bug fixes.
1.1
Delphi 3 now supported!
TToolbarButton97 component completely redesigned. Now it works exactly like a TSpeedButton. I also borrowed some of the glyph caching techniques used in Delphi 3 to make it much faster.
Added a Color property to the TDock97 and TToolbar97 controls so it now looks right in MDI forms.
TToolbar97's BarHeight property is no longer global to the whole application, as this sometimes caused problems. Now each toolbar has an individual BarHeight setting, which allows for greater flexibility.
Many design mode problems fixed. (And you can now move docked toolbars!)