TdfsExtProgressBar v2.06
Description:
A progress bar control that enables access to the new style types and large
range values provided by the updated progress bar control. The updated
progress bar is provided in the COMCTL32.DLL file that comes with Microsoft's
new internet software.
Installation:
Delphi 1:
* This component is not compatible with Delphi 1.
Delphi 2, C++Builder 1:
* Select the 'Component | Install' menu item.
* In the Install Components dialog, click the Add button.
* In the Add Module dialog, enter the full path name of the component's
registration unit (the unit that ends with 'Reg.pas', i.e.
'BrowseDrReg.pas') and click OK.
* In the Add Module dialog, click OK.
* The component library will be rebuilt and a new tab named 'DFS' will be
available on the Component Palette.
Delphi 3, 4, 5, C++Builder 3 & 4:
* Do one of the following:
+ Create a new package by selecting File | New and choosing Package from
the New tab in the dialog.
+ Open an existing package file. I suggest you do this if you already
have a package that you like to use for small, third party components.
I specifically have a package named "3rdParty.dpk" that I use for
small components that come from other people. Or, if you are using
several of my components, you might create a "DFS.dpk" package and
use it for all of my DFS components.
* In the resulting package window, click the Add button.
* In the Add dialog, on the Add Unit tab, enter the full path name of the
component's registration unit (the unit that ends with 'Reg.pas', i.e.
'BrowseDrReg.pas') and click OK.
* You may want to add the other source files (*.pas) to the package as
well in the same manner as you did the registration unit. While this is
not required, not doing it will cause compiler warnings when the package
is compiled. The component will function fine either way, but I
personally find the warnings very irritating and am not happy until
every compiler warning and hint is gone.
* If this package is new, or it has never been installed, click the
Install button in the package window. If this package is already
installed in Delphi, click the Compile button.
C++Builder 5 and up:
* Perform the "Delphi 3 and up, C++Builder 3 and up" steps above, except
for the last step (Compile or Install).
* Select the package the component has been added to, and choose
Project | Edit Option Source to open the package options in the editor.
* In the entry for PFLAGS, add the "-LUvcl50" option. For example:
* Perform the final step from above, Compile or Install.
* For Borland's official word on this situation, open the C++Builder help
file and search the index for "dsgnintf.dcu" and see the "Compiling
packages with DsgnIntf" section.
Delphi 6 and up:
* Perform the "Delphi 3, 4, 5, C++Builder 3 & 4" steps above, except
for the last step (Compile or Install).
* Add the DesignIDE package to the Requires list of the package into which
the component is being installed.
* Perform the final step from above, Compile or Install.
* This is necessary because of changes to the design-time support units
introduced in Delphi 6. For complete information, see the Del6New.hlp
file in your Delphi 6 Help directory. In the index, search for
"upgrade issues" and in the resulting list of topics, select the
"DsgnIntf renamed and related changes" topic.
Redistributing COMCTL32.DLL:
Microsoft used to have a really nasty redistribution policy about
COMCTL32.DLL: To redistribute it, you have to distribute Internet Explorer
with your app. Well, they've finally unpuckered a little bit (probably
because enough people griped long and loud enough (like Ron Burk in his
Windows Developer's Journal editorials and mail responses, THANKS RON!).
Anyhoo, here are links where you can find official redistribution information:
http://www.microsoft.com/permission/copyrgt/cop-soft.htm#Freq
This page lists general Microsoft copyright info, and address the
COMCTL32.DLL issue in particular. Of greatest note is item #3 which grants
permission to redistrubute a self-extracting archive provided by MS which
contains the DLL.
http://www.microsoft.com/msdn/downloads/files/40Comupd.htm
This page includes a link to the most current version (v4.72 as of this
writing) of COMCTL32.DLL in a self-extracting archive, and it even gives
directions on how to call it from your setup program so that it is "quiet",
that is it doesn't pop up a dialog over your installl program if you don't
want it to.
http://www.microsoft.com/msdn/downloads/files/40Comupd.exe
This is the link to the most current redistributable package. About 500k,
sheesh, but at least it's better than 20 or 30 meg that was required before.
Many thanks to Arentjan Banck for passing these links
along to me.
Notes:
* For the full documentation on all the new progress bar stuff as implemented
in the latest COMCTL32.DLL, have a look at Microsoft's documentation at:
http://www.microsoft.com/msdn/sdk/inetsdk/help/itt/CommCtls/ProgBar/ProgBar.htm
Also, you can find information on all the updates to COMCTL32.DLL at:
http://www.microsoft.com/msdn/sdk/inetsdk/help/itt/CommCtls/CommCtls.htm#book_cc
* This component demonstrates two useful techniques of component writing: how to
completely override a property from the ancestor class and how to add new
window styles to an existing window component.
* The Min, Max, and Position properties have been completely replaced from the
ones provided in TProgressBar. This is because the new version allows for
32-bit values to be used instead of 16-bit. This only applies if you are
NOT using it with Delphi 4. D4 has it right.
* The new progress bar provides two new properties not available in
TProgressBar:
Color: The background color of the progress bar.
SelectionColor: The color of the filled area of the progress bar.
Additionally, if you are not using Delphi 4, there are two other properties
that are not normally available:
Smooth: Causes the filled area to to be completely solid instead of
the normal, blocked style.
Orientation: Either pbHorizontal or pbVertical, it allows the bar to be
oriented vertically or horizontally.
* The component also demonstrates something not seen very often, a "real world"
use (i.e. not assembler) for the XOR boolean operator. See the
SetExtendedStyles method. :)
Known Issues:
* The Width property is getting trashed on form load when Align is not alNone
and Orientation is pbVertical. When Loaded gets called, Width is
equal to Height, even though the form file has a valid Width value. I am
at a complete loss to explain this. The best I can tell you to do is
manually reset the Width property in your form's OnShow event.
* The documentation for the new COMCTL32.DLL lists a PBM_SETBKCOLOR message
very similar to PBM_SETBARCOLOR. But, unlike PBM_SETBARCOLOR, I can't get
PBM_SETBKCOLOR to work. It's supposed to change the background (unused
portion) color of the progress bar. I have instead implemented it via the
WM_ERASEBKCOLOR message. The code for PBM_SETBKCOLOR is all in place for
the Color property, and I can't find anything wrong with it, so my only
guess is that it isn't working in COMCTL32.DLL or something in the VCL is
stomping on it. If you want to have a try and see if works for you, enable
the DFS_TRY_BKCOLOR define that's near the top of ExtProgressBar.pas. If
you have more luck than me, please let me know.
Revision History:
2.06: + Updated for Delphi 6 compatibility. See updated install directions
above.
2.05: + Updated for C++Builder 5 compatibility.
2.04: + It's *really* D5 compatible now. Small change between the D5 eval
version and the real, shipping D5 version broke it.
2.03: + TExtProgressBar classname changed to TdfsExtProgressBar.
+ Updated for Delphi 5 compatibility.
2.02: + Updated for C++Builder 4 compatibility.
2.01: + Added ExtProgressBarReg unit. All IDE specific code (i.e.
registering the component, property editors, etc.) are contained in
this unit. This was done for two primary reasons: 1) Using the
component in a Delphi or C++Builder expert would register the
component as well. 2) Reduce code size in some cases -- usually
the smart linker removes this sort of stuff since the app never
references it, but now it's for certain since it isn't even in the
unit. This change means that you need to install the component
using the new "registration" unit instead of the unit containing
the component.
2.00: + Rewrite for Delphi 4. Delphi 4 provides the most important parts of
this component, namely 32-bit values for the ranges and the
horizontal and smooth styles. However, it does not implement
everything, such as the ability to change the colors. So, I have
rewritten it such that the properties match the ones in Delphi 4 so
that maintaining/migrating will be easier. Notably, there is no
longer an ExtendedStyles property. Instead, there are Orientation
and Smooth properties.
1.13: + Added Version property.
1.12: + Renamed Color property to SelectionColor. Color is used throughout
the VCL to mean the background color, so I changed it for consitency.
+ Added new Color property to control the background color. I never
could get the COMCTL way of doing this (PBM_SETBKCOLOR message) to
work, so I've just implemented it the old way (WM_ERASEBKGND message).
1.11: + Wouldn't compile under C++Builder 1.
1.10: + Added new property: Color. Sets the color of the bar. This feature
was introduced in COMCTL32.DLL v4.71.
+ Fixed problem with C++Builder 3 run-time packages.
1.02: + Updated for new DFS.INC file, component tab name, history/comments
file.
1.01: + Wouldn't compile under Delphi 3.
1.00: + Initial release.