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.