When I was preparing a sample file for the How To Prevent Support Calls video I wanted to make it as cool as possible, so I decided to optimize it for FileMaker Go. I quickly discovered that I need a plug-in free alternative for the progress dialog.
I wanted something nice looking while still as easy to implement as 24U SimpleDialog Plug-In. That really was the kind of challenge I like. I started getting ideas only to deny each of them in the very next second:
- New window displaying a special “progress bar” layout – not good for Go, problem with maintaining script’s context.
- Transparent web viewer in the front layer rendering CSS – too complicated to develop, may be hard to interact with objects behind the web viewer. I also thought that rendering HTML is a bit of overkill.
- Collection of fields to display progress status and progress bar – the oldest approach, a little boring, and too difficult to copy across solutions.
Then I got this one which I implemented in the sample file: conditional formatting
In this implementation a single global text field displays the progress status, 10 text objects use conditional fill color to show the progress bar, 2 button objects use conditional fill color to serve as a dialog-like background and frame. To implement it into your solution you only need to copy one field, one group of layout objects and then update the progress field and refresh window from within your script. Fair enough, isn’t it? Well, not for me…
So I asked myself – can I make it even simpler? And I got another idea: merge variable
Then I created the final implementation:
- No plug-ins
- No fields
- No dependency on the database schema
- A single layout objects group to copy
- No modifications necessary
- Driven by a single global variable: $$progress
- Works in FileMaker Pro 11 and FileMaker Go
And here it is for you to take and use for free:
(even directly to iPhone or iPad with FileMaker Go installed)
How do you like it?



{ 22 comments… read them below or add one }
Pretty cool thanks, I was thinking of a good way to do this myself. Just dont try it on Windows
the refresh window step causes too much flicker. However on that note, inside the loop if you replace the refresh window[] step with
ause/Resume [Duration (seconds): 0 ] Freeze Windowit refreshes itself without flicker.
Very nice, HOnza. Unrelated question: How do you put round corners on a text box?
Good poinr, Steve! Thanks. Paul, you’ve made me correct the article – check the difference
HOnza, Steve… brilliant.
ahh… perfect. Thanks HOnza!
John, thanks, praise from you counts twice
Honza, I’ve learned a lot with this file and other readers’ comments. Thanks a lot for sharing this!
Thanks, Fabrice. I’m glad it helped you. Hope you’ll share when you improve it even more…
Thanks HOnza, this is great!
Great solution! Thanks for sharing it.
This is a great technique. When I open the indicate progress script on v11 on OS X 10.6, I see a lot of <function> insertions. Is there a component missing? The file still demos correctly though?
that last comment is supposed to say function MISSING insertions
Thanks for the comments. I am glad you like the solution.To Denis: the script automatically uses 24U SimpleDialog Plug-In in FileMaker Pro when it is installed. If you don’t have SimpleDialog installed it will simply automatically use the plug-in free implementation.
Honza, is there a way to use this script that is not in a loop? Also, I’m curious as to why we need to relate the progress as a function of time (20 seconds in your example) when it should be according to progress made in the script, no?Thanks,Denis
Denis, the example uses the loop and the time function only as placeholders for real work you would be doing in your scripts.The key is when you want to advance the progress bar you have to do 2 things: update the $$progress variable, and refresh the window. That’s all. When you set the $$progress variable to an empty string and refresh the window the progress indicator disappears.Try to open the file in FileMaker Pro Advance, and try to set the $$progress variable to various values using the Data Viewer. You’ll see how it works.
Honza,
I use this all the time! I’ve even created Looping Scripts and the layout Objects in ScriptMaster that I can paste into my code quickly. Works great and is soooo simple!
Thanks, Hal
hi Hal,
I am intrigued by this technique with ScriptMaster. Do you mean you create the XML structure of the layout objects, and simply place them into a container field?
Really well done! We are going to start implementing this in a lot of our solutions.
Thanks for the technique. I adapted it a bit so that I use a global field instead of text blocks, and thought you might be interested in the solution. Basically, I created a global field with 101 repetitions, all of which I display on the layout. The conditional formatting for the field is ( ( Get( CalculationRepetitionNumber ) – 1 ) / 100 ) ≤ $$INTERFACE.PROGRESSBAR1, which allows very granular progress indication and, should more become desired, increasing the repetitions and editing the conditional calc will do so. The global variable is designed to have a percentage value between 0 and 1.
Thanks for sharing your experience, Charles.
In my case I wanted to avoid using fields at all to make it easier to copy the progress bar as a single layout objects group and paste it into any other solution.
But I also like your idea of using a repeating field with conditional formatting. That’s a nice way to achieve better granularity without having too many objects on the layout. It’s also less work to implement from scratch.
HOnza,
Very nicely done…from the posts it looks like I’m late to the party, but appreciate your work just the same.
One thing I ran into when installing this method on a solution is that the representation on screen during use was displaced. I don’t see that in your demo file and wondered if you had run into it before.
When in layout mode, I’ll put the bottom right corner of the grouped MV’s at, say pixel 100,100.
In browse mode, when the progress bar graphic shows, the Top-Left corner is at pixel 100,100. Not quite sure why this happens…any thoughts?
Eric, I think the reason is that there are no anchors set, so the progress indicator’s position is maintained as relative to the center of the layout.