Kieren MacMillan sent me a file demonstrating how to create a progress bar using conditional formatting. Traditional techniques involve some type of field combined with a script. Using conditional formatting lets you divorce the feature from the table schema, allowing the progress bar to work in any table and in any file without modification.
Conditional formatting can be applied to text blocks, fields, Web Viewers, and buttons created using the button tool. Out of the four objects that can be used, text blocks and buttons are the best choices for this technique. It doesn't matter which one you use, but I think buttons are a better choice because you don't need any text for the technique to work. You do have to remove the embossing, pen, and fill colors from a button, but only once.
Start by determining how large you want each segment of the progress bar to be. For this example, I'll use a 5-pixel wide and 15-pixel tall button. If you want to go smaller on the button height to create a thinner progress bar, you might have to decrease the font size. Even though no text will be typed into the button, the font size determines the smallest button you can have. With 12-point font size applied to a button, I was only able to make my button a minimum of 14 pixels tall.
When you create your button, don't assign a script to it. Just click the OK button to exit the dialog and don't type any text for the button. Once you have your button the size you'd like each segment, remove the embossing, fill color, and pen color. Use a transparent pen and fill, rather than a fill color, and make it the same as your background since duplicates of the original button will be overlapping. The goal is to make the buttons blend in with the background. Don't lose your button -- it won't display when a script isn't assigned.
Your next step is to assign the conditional formatting to the button. Choose your favorite fill color and enter the formula:
$ProgressBar > 0
You can use a global variable if you like so the progress bar doesn't disappear after the script is finished running. In many situations, I think it works well if the progress bar disappears after it has completed. And, I certainly wouldn't create a global variable unless you really need the completed progress bar to remain on the screen. Global variables clutter up the Data Viewer and memory, and could potentially result in conflicts if the same variable name is used in several scripts.